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;
}

  哇哈哈。。。。。。。。

posted @ 2012-08-04 19:50  xxx0624  阅读(265)  评论(0编辑  收藏  举报