![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
#include<iostream> using namespace std; int begin[9][9]; bool check(int x,int y,int k) { for(int i=0;i<9;i++) if(begin[i][y]==k) return false; for(int j=0;j<9;j++) if(begin[x][j]==k) return false; int sx=(x/3)*3; int sy=(y/3)*3; for(int i=sx;i<sx+3;i++) for(int j=sy;j<sy+3;j++) if(begin[i][j]==k) return false; return true; } bool dfs(int x,int y) { if(begin[x][y])//这个if用来深度搜索 { if(y+1<9) { if(dfs(x,y+1))//y++也就是遍历第一行 return true; } else if(x+1<9) { if(dfs(x+1,0))// 当列不能再加的时候再从第二行的第一列开始循环; return true; } else return true; } else { for(int k=1;k<=9;k++) { if(check(x,y,k)) { begin[x][y]=k; if(y+1<9) { if(dfs(x,y+1)) return true; } else if(x+1<9) { if(dfs(x+1,0)) return true; } else return true; begin[x][y]=0; } } } return false; } int main() { int t; cin>>t; while(t--) { for(int i=0;i<9;i++) for(int j=0;j<9;j++) cin>>begin[i][j]; dfs(0,0); for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { cout<<begin[i][j]<<" "; } cout<<endl; } } //system("pause"); return 0; }