1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 bool v[10][10],row[10][10],col[10][10],used[4][4][10]; 5 int a[10][10]; 6 bool flag; 7 void dfs(int x,int y) 8 { 9 if (flag) return ; 10 if (x>9) 11 { 12 for (int i=1;i<=9;i++) 13 { 14 for (int j=1;j<=9;j++) printf("%d",a[i][j]); 15 printf("\n"); 16 } 17 flag=true; 18 return; 19 } 20 21 if (v[x][y]==1) 22 { 23 if (y==9) dfs(x+1,1); 24 else dfs(x,y+1); 25 } 26 else 27 { 28 v[x][y]=1; 29 for (int i=1;i<=9;i++) 30 if (row[x][i]==0 && col[y][i]==0 && used[(x-1)/3+1][(y-1)/3+1][i]==0) 31 { 32 a[x][y]=i; 33 row[x][i]=1; 34 col[y][i]=1; 35 used[(x-1)/3+1][(y-1)/3+1][i]=1; 36 if (y==9) dfs(x+1,1);else dfs(x,y+1); 37 a[x][y]=0; 38 row[x][i]=0; 39 col[y][i]=0; 40 used[(x-1)/3+1][(y-1)/3+1][i]=0; 41 } 42 v[x][y]=0; 43 } 44 } 45 46 int main() 47 { 48 int n; 49 scanf("%d",&n); 50 for (int t=1;t<=n;t++) 51 { 52 memset(a,0,sizeof(a)); 53 memset(v,0,sizeof(v)); 54 memset(row,0,sizeof(row)); 55 memset(col,0,sizeof(col)); 56 memset(used,0,sizeof(used)); 57 for(int i=1;i<=9;i++) 58 { 59 char str[10]; 60 scanf("%s",str); 61 for (int j=0;j<9;j++) 62 { 63 a[i][j+1]=str[j]-'0'; 64 if (a[i][j+1]!=0) 65 { 66 v[i][j+1]=1; 67 int x=a[i][j+1]; 68 row[i][x]=1; 69 col[j+1][x]=1; 70 used[(i-1)/3+1][(j+1-1)/3+1][x]=1; 71 } 72 } 73 } 74 /* 75 for (int i=1;i<=9;i++) 76 { 77 for (int j=1;j<=9;j++) printf("%d ",row[i][j]); 78 printf("\n"); 79 } 80 */ 81 flag=false; 82 dfs(1,1); 83 } 84 return 0; 85 }