DFS专题中的一道,据说是水题然而我还是WA了。。。Orz。后来参考了题解,感觉自己的思路有点问题,自己想的是用flag标记,题解是直接比较cnt和n,目前还没想到为什么会WA。容我再想想。。。。
#include<stdio.h>
#include<string.h>
int n,num[105][105],loc[105][2],flag,cnt;
int vis[105][105],mov[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int x,int y,int a);
int main()
{
int i,j,a,b;
while(~scanf("%d",&n)&&n!=0){
memset(num,n,sizeof(num));
memset(vis,0,sizeof(vis));
for(i=1;i<n;i++){
for(j=0;j<n;j++){
scanf("%d%d",&a,&b);
num[a][b]=i;
if(j==0){loc[i][0]=a;loc[i][1]=b;}
}
}
for(i=1;i<n;i++){
cnt=0;
flag=0;
dfs(loc[i][0],loc[i][1],i);
// if(flag==0) break;
if(cnt<n) break;
}
if(i==n) printf("good\n");
else printf("wrong\n");
}
return 0;
}
void dfs(int x,int y,int a)
{
int k,mx,my;
cnt++;
vis[x][y]=1;
/* if(cnt==n){
flag=1;
return;
}*/
for(k=0;k<4;k++){
mx=x+mov[k][0];my=y+mov[k][1];
if(mx>0&&mx<=n&&my>0&&my<=n&&num[mx][my]==a&&!vis[mx][my]){
dfs(mx,my,a);
}
}
return;
}