標籤:
N沒有給資料範圍是這題最噁心的地方,因為這個wa了有點噁心。
/*ID: modengd1PROG: snailLANG: C++*/#include <iostream>#include <stdio.h>#include <memory.h>using namespace std;char Map[200][200];bool vis[200][200];int N,M;int dx[4]={1,0,-1,0};int dy[4]={0,1,0,-1};int ans;void DFS(int x,int y,int dir,int step){ ans=max(ans,step); if(x+dx[dir]<0||x+dx[dir]>=N||y+dy[dir]<0||y+dy[dir]>=N||Map[x+dx[dir]][y+dy[dir]]==‘#‘) { int d=(dir+1)%4; if(!(x+dx[d]<0||x+dx[d]>=N||y+dy[d]<0||y+dy[d]>=N||Map[x+dx[d]][y+dy[d]]==‘#‘||vis[x+dx[d]][y+dy[d]])) { vis[x+dx[d]][y+dy[d]]=true; DFS(x+dx[d],y+dy[d],d,step+1); vis[x+dx[d]][y+dy[d]]=false; } d=(4+dir-1)%4; if(!(x+dx[d]<0||x+dx[d]>=N||y+dy[d]<0||y+dy[d]>=N||Map[x+dx[d]][y+dy[d]]==‘#‘||vis[x+dx[d]][y+dy[d]])) { vis[x+dx[d]][y+dy[d]]=true; DFS(x+dx[d],y+dy[d],d,step+1); vis[x+dx[d]][y+dy[d]]=false; } } else if(!vis[x+dx[dir]][y+dy[dir]]) { vis[x+dx[dir]][y+dy[dir]]=true; DFS(x+dx[dir],y+dy[dir],dir,step+1); vis[x+dx[dir]][y+dy[dir]]=false; }}int main(){ freopen("snail.in","r",stdin); freopen("snail.out","w",stdout); char y; int x; memset(vis,false,sizeof(vis)); scanf("%d%d",&N,&M); getchar(); for(int i=0;i<M;i++) { scanf("%c%d",&y,&x); Map[x-1][y-‘A‘]=‘#‘; getchar(); } ans=0; DFS(0,0,0,1); memset(vis,false,sizeof(vis)); DFS(0,0,1,1); cout<<ans<<endl; return 0;}
usaco Snail Trails