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;

}

  哇哈哈。。。。。。。。

你可能感兴趣的:(poj)