NYOJ 722

来源:互联网 发布:淘宝企业店可靠吗 编辑:程序博客网 时间:2024/06/05 18:20

NYOJ 722

#include<stdio.h>#include<string.h>int Map[9][9],floag;int IsCan(int number,int x,int y){//判断Numebr是否满足数独的条件    int i,j;    for(i=0;i<9;i++){        if(Map[i][y]==number){            return 0;        }    }    for(i=0;i<9;i++){        if(Map[x][i]==number){            return 0;        }    }    x=x/3*3,y=y/3*3;    for(i=x;i<x+3;i++)        for(j=y;j<y+3;j++)            if(Map[i][j]==number)            return 0;    return 1;}void dfs(int x,int y){    if(floag) return ;//floag用于标记,当所有数据都搜完的时候就给跳出    if(x==9 && y==0){        int i,j;        for(i=0;i<9;i++){            for(j=0;j<9;j++){                printf("%d ",Map[i][j]);            }                printf("\n");        }            floag=1;        return ;    }    if(y==9){//一行结束进入下一行        dfs(x+1,0);    }    if(Map[x][y]!=0){//已经有数就填下一个        dfs(x,y+1);    }    if(Map[x][y]==0){        int i;        for(i=1;i<=9;i++){            if(IsCan(i,x,y)){                Map[x][y]=i;                dfs(x,y+1);                Map[x][y]=0;//回溯清除,当一次搜索结束的时候但是不满足就将之前的结果清除            }        }    }}int main(){    int n;    scanf("%d",&n);    while(n--){        int i,j;        for(i=0;i<9;i++){            for(j=0;j<9;j++){                scanf("%d",&Map[i][j]);            }        }        dfs(0,0);        memset(Map,0,sizeof(Map));        floag=0;    }    return 0;}



0 0
原创粉丝点击