求dalao改错,第二个点过不了,qwq

P1434 [SHOI2002] 滑雪

小炫羊 @ 2018-03-06 12:59:46

#include<cstdio>
#include<cstring>

int n,k,ma[110][110],s[110][110],max=0;
struct nod{int x,y,t;}a[10010];

int dx[5]={0,1,0,-1,0};
int dy[5]={0,0,1,0,-1};
int f[110][110];
void dfs(int x,int y)
{
    int tou=1,wei=2;
    a[tou].x=x;a[tou].y=y;a[tou].t=1;
    f[x][y]=1;
    while(tou!=wei)
    {
        int sx=a[tou].x,sy=a[tou].y;
        for(int i=1;i<=4;i++)
        {
            int fx=sx+dx[i],fy=sy+dy[i];
            if(fx<1||fy<1||fx>n||fy>k||ma[fx][fy]>=ma[sx][sy])continue;
            if(s[fx][fy]>a[tou].t)continue;
            s[fx][fy]=a[tou].t;
            if(max<a[tou].t)max=a[tou].t;
            if(max==n*k)return;
            if(f[fx][fy]==0)
            {
                f[fx][fy]=1;
                a[wei].x=fx;a[wei].y=fy;
                a[wei].t=a[tou].t+1;
                wei++;
                if(wei>n*k+1)wei=1;
            }
        }
        f[a[tou].x][a[tou].y]=0;
        tou++;
        if(tou>n*k+1)tou=1;
    }
}

int main()
{
    scanf("%d %d",&n,&k);
    memset(s,0,sizeof(s));
    for(int i=1;i<=n;i++)for(int j=1;j<=k;j++)scanf("%d",&ma[i][j]);
    for(int i=1;i<=n;i++)for(int j=1;j<=k;j++)dfs(i,j);
    printf("%d",max+1);
}

|