#include<stdio.h> #include<string.h> int a[10][10]; bool sign[10][10];//标ji bool ssign;//标记是否已经得到结果 bool isign[10][10];//第i行中1-9是否已经填入 bool jsign[10][10];//第j列中1-9是否已经填入 bool ijsign[4][4][10];//小方块中1-9是否已经填入 int N=9; void init(); int iDFS(int i,int j); int main() { int n; scanf("%d",&n); while(n--) { memset(sign,false,100); memset(isign,false,100); memset(jsign,false,100); memset(ijsign,false,160); ssign=false; init(); iDFS(1,1); } return 0; } int iDFS(int i,int j) { if(i==10&&j==1) { int x,y; for(x=1;x<=N;x++) { for(y=1;y<=N;y++) printf("%d",a[x][y]); printf("/n"); } ssign=true; return 0; } if(sign[i][j]) { if(j==9)iDFS(i+1,1); else iDFS(i,j+1); return 0; } int k;int p=(i-1)/3+1;int q=(j-1)/3+1; for(k=1;k<=9;k++) { if(!isign[i][k]&&!jsign[j][k]&&!ijsign[p][q][k]) { a[i][j]=k;isign[i][k]=true;jsign[j][k]=true;ijsign[p][q][k]=true; if(j==9)iDFS(i+1,1); else iDFS(i,j+1); if(ssign)return 0; isign[i][k]=false;jsign[j][k]=false;ijsign[p][q][k]=false; } } return 0; } void init() { int i,j; for(i=1;i<=N;i++) { char temp; scanf("%c",&temp); for(j=1;j<=N;j++) { scanf("%c",&temp); a[i][j]=temp-48; if(a[i][j]) { sign[i][j]=true; isign[i][a[i][j]]=true; jsign[j][a[i][j]]=true; ijsign[(i-1)/3+1][(j-1)/3+1][a[i][j]]=true; } } } }