poj3194
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 1005 int map[N][N]; int vis[N][N]; int n,ans,now_k; const int dx[]={0,0,-1,1}; const int dy[]={-1,1,0,0}; void dfs(int sx,int sy){ int i,tx,ty; if(ans==n){ return ; } for(i=0;i<4;i++){ tx=sx+dx[i]; ty=sy+dy[i]; if(tx<1||tx>n||ty<1||ty>n||vis[tx][ty]==1||map[tx][ty]!=now_k) continue; vis[tx][ty]=1; ans++; dfs(tx,ty); } return ; } int main(){ int a,b,i,j,p; int flag; while(scanf("%d",&n),n){ for(i=1;i<=n;i++) for(j=1;j<=n;j++) map[i][j]=n; for(i=1;i<n;i++){ for(j=1;j<=n;j++){ scanf("%d%d",&a,&b); map[a][b]=i; } }//input flag=1;//yes int sx,sy; memset(vis,0,sizeof(vis)); for(now_k=1;now_k<=n && flag==1;now_k++){ for(i=1;i<=n && flag==1;i++) for(j=1;j<=n && flag==1;j++){ if(map[i][j]==now_k && vis[i][j]==0){ sx=i; sy=j; vis[i][j]=1; ans=1; dfs(sx,sy);// if(ans==n)//必须搜索到n个k flag=1; else flag=0;//no } } } if(flag==1) printf("good\n"); else printf("wrong\n"); } return 0; }
哇哈哈。。。。。。。。
keep moving...