简单dfs题91分WA#9求助

P1560 [USACO5.2] 蜗牛的旅行Snail Trails

你有些地方没判断到,我照你的思路打了一下 ``` #include<bits/stdc++.h> using namespace std; int n,m,ans=1; int v[1000][1000],a[1000][1000]; int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1}; stack<int> stx; stack<int> sty; int check(int x,int y,int d){ x+=dx[d];y+=dy[d]; if(x<1||y<1||y>n||x>n) return 0; if(a[x][y]==1) return 0; return 1; } void dfs(int x,int y,int d,int sum){ // if(check(x,y)==0) return; // for(int i=0;i<4;i++){ //// cout<<"sidhaoiudh"<<endl; // int s=0;int nx=x+dx[i],ny=y+dy[i]; // if(check(nx,ny)==0) continue; // while(check(nx,ny)==1){ // s++; // v[nx][ny]=1; // nx+=dx[i];ny+=dy[i]; // } // if(v[nx][ny]==1){ // ans=max(ans,sum+s); // break; // } // dfs(nx-dx[i],ny-dy[i],sum+s); //// for(int j=1;j<=s;j++){ //// nx-=dx[i];ny-=dy[i]; //// v[nx][ny]=0; //// } // } int nx=x,ny=y; for(int i=0;i<4;i++) if(v[x+dx[i]][y+dy[i]]==1) ans=max(ans,sum+1); if(check(x,y,d)==0) return; while(check(nx,ny,d)==1){ v[nx][ny]=1; // stx[++top]=nx;sty[top]=ny; stx.push(nx);sty.push(ny); nx+=dx[d];ny+=dy[d];sum++; if(v[nx][ny]==1){ if(sum>ans) ans=sum; // cout<<"asidhaiusbda"<<endl; // cout<<ans<<endl; return; } } int dl=(d+1)%4,dr=(d+3)%4; dfs(nx,ny,dl,sum);dfs(nx,ny,dr,sum); while(stx.top()!=x||sty.top()!=y) { v[stx.top()][sty.top()]=0;stx.pop();sty.pop(); } return; } int main(){ cin>>n>>m; char x;int y; for(int i=1;i<=m;i++){ cin>>x>>y; a[x-'A'+1][y]=1; } // v[1][1]=1; if(check(1,1,1)) dfs(1,1,1,0); if(check(1,1,2)) dfs(1,1,2,0); // for(int i=1;i<=n;i++){ // for(int j=1;j<=n;j++) // cout<<a[i][j]; // cout<<endl; // } cout<<ans<<endl; return 0; } ```
by RAIH @ 2021-04-11 16:53:09


|