Equidivisions

来源:互联网 发布:超级基因优化液女主角 编辑:程序博客网 时间:2024/06/04 23:50

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


0 0