数独~~~~~~只记得当下的眼疼

只记得挡下的强烈( ~不潮不花钱~) , 那个啥 言归正传 , 今晚真是 做的眼疼 , 只记得当下的强烈 , 扣扣扣扣 , 左左左左 偏左就用左手 . 好不容易做出来  结果被  卡死到  输出格式上了 ......

这个题是需要再做一下的

 输出的时候 两组数据之间必须要有一个空行 隔开

 实际上搜索是非常简单的 , 就是跳出去的时机应该好好把握 . 

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 }

 

 

原文地址:https://www.cnblogs.com/A-FM/p/5342844.html