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