WA了第一个点,求助!!!

P1434 [SHOI2002] 滑雪

``` #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int r,c; int a[102][102]; int minn=9999999,ii,jj; int s[102][102]; int ans=-1; void dfs(int x,int y) { int t=0,aa,bb; if(x-1>=1&&a[x-1][y]>a[x][y])//上 { s[x-1][y]=max(s[x-1][y],s[x][y]+1); t++; aa=a[x-1][y]; bb=1; } if(y-1>=1&&a[x][y-1]>a[x][y])//左 { s[x][y-1]=max(s[x][y-1],s[x][y]+1); t++; if(t==1) { aa=a[x][y-1]; bb=2; } else if(a[x][y-1]<aa) { aa=a[x][y-1]; bb=2; } } if(x+1<=r&&a[x+1][y]>a[x][y])//下 { s[x+1][y]=max(s[x+1][y],s[x][y]+1); t++; if(t==1) { aa=a[x+1][y]; bb=3; } else if(a[x+1][y]<aa) { aa=a[x+1][y]; bb=3; } } if(y+1<=c&&a[x][y+1]>a[x][y])//右 { s[x][y+1]=max(s[x][y+1],s[x][y]+1); t++; if(t==1) { aa=a[x][y+1]; bb=4; } else if(a[x][y+1]<aa) { aa=a[x][y+1]; bb=4; } } if(t==0)return; else { if(bb==1)dfs(x-1,y); else if(bb==2)dfs(x,y-1); else if(bb==3)dfs(x+1,y); else if(bb==4)dfs(x,y+1); return; } } int main() { scanf("%d %d",&r,&c); for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { scanf("%d",&a[i][j]); if(a[i][j]<minn)//找到其中四周都不能走的 { minn=a[i][j]; ii=i; jj=j; } } } s[ii][jj]=1; dfs(ii,jj); for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { if(s[i][j]==0) { s[i][j]=1; dfs(i,j); } } } for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { ans=max(ans,s[i][j]); } } printf("%d",ans); return 0; } ```
by MeU的小雪球 @ 2019-04-16 13:29:33


|