数独
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 }