数独

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn=27;
 6 bool flag;
 7 int map[maxn][maxn];
 8 bool check(int x,int val){
 9   int j=x/9;
10   for(int i=0;i<9;i++){
11     if(map[j][i]==val) return false;
12   }
13   j=x%9;
14   for(int i=0;i<9;i++){
15     if(map[i][j]==val) return false;
16   }
17   int xx=x/9/3*3;
18   int yy=x%9/3*3;
19   for(int i=xx;i<xx+3;i++){
20     for(int j=yy;j<yy+3;j++){
21       if(map[i][j]==val) return 0;
22     }
23   }
24   return true;
25 }
26 int dfs(int x){
27   if(x>=81){flag=true;return 0;}
28   if(map[x/9][x%9]!=0){dfs(x+1);}
29   else{
30     for(int i=1;i<=9;i++){
31       if(check(x,i)==true){
32         map[x/9][x%9]=i;
33         dfs(x+1);
34         if(flag==true) return 0;
35         map[x/9][x%9]=0;
36       }
37     } 
38   }
39 }
40 int main(){
41     for(int i=0;i<9;i++){
42       for(int j=0;j<9;j++){
43         cin>>map[i][j];
44       }
45     }
46     dfs(0);
47     for(int i=0;i<9;i++){
48       for(int j=0;j<9;j++){
49         cout<<map[i][j]<<" "; 
50       } 
51       cout<<endl;
52     }
53   return 0;
54 }

 

posted @ 2018-09-13 21:17  lcan  阅读(191)  评论(0编辑  收藏  举报