数独~~~~~~只记得当下的眼疼
只记得挡下的强烈( ~不潮不花钱~) , 那个啥 言归正传 , 今晚真是 做的眼疼 , 只记得当下的强烈 , 扣扣扣扣 , 左左左左 偏左就用左手 . 好不容易做出来 结果被 卡死到 输出格式上了 ......
这个题是需要再做一下的
输出的时候 两组数据之间必须要有一个空行 隔开
实际上搜索是非常简单的 , 就是跳出去的时机应该好好把握 .
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("\n"); 78 } 79 printf("\n"); 80 } 81 return 0; 82 }