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...

浙公网安备 33010602011771号