深搜为什么WA了两个点?(第一个和第八个)求教!!!

P1434 [SHOI2002] 滑雪

lxl_ @ 2018-11-05 09:12:01

#include<bits/stdc++.h>
using namespace std;
int n,m,f[105][105],fm[105][105]={0},imax,ans=1,sum=-1;
int dx[4]={0,0,1,-1},
    dy[4]={1,-1,0,0};
int dfs(int x,int y)
{
    int minx=x,miny=y,minf=100000;
    for(int i=0;i<=3;i++)
    {
        int a=x+dx[i],b=y+dy[i];
        if(a>=1&&a<=n&&b>=1&&b<=m&&!fm[a][b])
        {
            if(f[a][b]>f[x][y])
            {
               if(minf>f[a][b])
               {
                  minf=f[a][b];
                  minx=a;
                  miny=b;
               } 
            }
        }
    }
    if(minx==x&&miny==y)
      return ans;
    else
    {
        fm[minx][miny]=1;
        ans++;
        dfs(minx,miny);
    }
}
int main(){
    scanf("%d%d",&n,&m);
    if(n==0||m==0)
      return 0;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
         scanf("%d",&f[i][j]);
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
      {
        ans=1;
        sum=max(sum,dfs(i,j));
      }
    printf("%d\n",sum);
    return 0;
}

|