usaco snail trails(dfs)

来源:互联网 发布:车主采集软件 编辑:程序博客网 时间:2024/06/06 01:12

dfs啊,我还写了好长时间,一天不如一天。

/*ID:jinbo wuTASK: snailLANG:C++*/ #include<bits/stdc++.h>using namespace std;char a[150][150];int dir[4][2]={0,1,1,0,0,-1,-1,0};bool vis[150][150];int n,m;int dfs(int x,int y,int d){int dx=x+dir[d][0];int dy=y+dir[d][1];vis[x][y]=1;if(dx>=1&&dx<=n&&dy>=1&&dy<=n&&vis[dx][dy]==1){ vis[x][y]=0; return 1;    }else if(dx>n||dx<1||dy>n||dy<1||a[dx][dy]=='#'){int t=(d+1)%4;int tx=x+dir[t][0];int ty=y+dir[t][1];int tmp1=0;int tmp2=0;if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&!vis[tx][ty]&&a[tx][ty]!='#')tmp1=dfs(tx,ty,t);t=(d+3)%4;tx=x+dir[t][0];ty=y+dir[t][1];if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&!vis[tx][ty]&&a[tx][ty]!='#')tmp2=dfs(tx,ty,t);int ans=max(tmp1,tmp2);vis[x][y]=0;return ans+1; }int tmp=dfs(dx,dy,d);//开市就错在这里我先把vis=0后在dfs的明显不行。vis[x][y]=0;return 1+tmp; }int main(){freopen("snail.in","r",stdin);freopen("snail.out","w",stdout);cin>>n>>m;char c;int b;for(int i=0;i<m;i++){getchar();scanf("%c%d",&c,&b);a[b][c-'A'+1]='#';}int tmp1=dfs(1,1,0);int tmp2=dfs(1,1,1);cout<<max(tmp1,tmp2)<<endl; } 


0 0
原创粉丝点击