1 #include<stdio.h>
2 int a[9][9];
3 int flag;
4 bool check(int y,int x,int mark)
5 {
6 for(int i=0;i<9;i++)
7 {
8 if(a[y][i]==mark)
9 return false;
10 if(a[i][x]==mark)
11 return false;
12 }
13 for(int i=(y/3)*3;i<(y/3)*3+3;i++)
14 for(int j=(x/3)*3;j<(x/3)*3+3;j++)
15 {
16 if(a[i][j]==mark)
17 return false;
18 }
19 return true;
20 }
21 int n;
22 void DFS()
23 {
24 if(n==81)
25 {
26 return;
27 }
28 for(int i=n,mark=0;i<=81;i++) // 在 搜索的时候 尽量 少用 for循环 不然到时候 找到合适的条件的时候 不容易跳出来
29 {
30
31 if(i==81)
32 {
33 n=81;
34 return;
35 }
36 int y=i/9,x=i%9;
37 if(a[y][x]==0)
38 {
39 for(int i=1;i<=9;i++)
40 {
41 if(check(y,x,i))
42 {
43 a[y][x]=i;
44 DFS();
45 if(n==81)
46 {
47 i=81;
48 break;
49 }
50 a[y][x]=0;
51 }
52 if(i==9)
53 {
54 mark=1;
55 }
56 }
57 if(mark)
58 break;
59 }
60 }
61 }
62 int main()
63 {
64 int t;
65 scanf("%d",&t);
66 while(t--)
67 {
68 for(int i=0;i<9;i++)
69 for(int j=0;j<9;j++)
70 scanf("%d",&a[i][j]);
71 n=0;
72 DFS();
73 for(int i=0;i<9;i++)
74 {
75 for(int j=0;j<9;j++)
76 printf("%d ",a[i][j]);
77 printf("
");
78 }
79 printf("
");
80 }
81 return 0;
82 }