只记得挡下的强烈( ~不潮不花钱~) , 那个啥 言归正传 , 今晚真是 做的眼疼 , 只记得当下的强烈 , 扣扣扣扣 , 左左左左 偏左就用左手 . 好不容易做出来 结果被 卡死到 输出格式上了 ......
这个题是需要再做一下的
输出的时候 两组数据之间必须要有一个空行 隔开
实际上搜索是非常简单的 , 就是跳出去的时机应该好好把握 .
Hey greedy,don’t fret
What you see is what you get
You name it,I have it
请你不要到处扣扣
最早的时候 我一直用的都是 两个for循环 遍历 寻找 结果就是 不停错误 , ......................先付上修改之后的代码 , 一会在用原来的思想强行实现一波.
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 }