代碼如下#include<stdio.h>
int?num[9][9],?xy[9][9];
int?check(int?x,?int?y)?{
????int?i,?m,?n;
????for(i?=?0;?i?<?9;?i++)
????????if?((xy[x][y]?==?xy[i][y]&&i?!=?x)||(xy[x][y]?==?xy[x][i]&&i?!=?y))
????????????return?0;
????for(i?=?0,?m?=?x?/?3?*?3,?n?=?y?/?3?*?3;?i?<?9;?i++)
????????if?(xy[x][y]?==?xy[m?+?i?/?3][n?+?i?%?3]&&m?+?i?/?3?!=?x&&n?+?i?%?3?!=?y)
????????????return?0;
????return?1;
}
void?search(int?x,?int?y)?{
????if?(x?==?9)
????????for(x?=?0;?x?<?9;?x++)?{
????????????for(y?=?0;?y?<?9;?y++)
????????????????printf("%d?",?xy[x][y]);
????????????printf("\n");
????????}
????else?if?(num[x][y])
????????search(x?+?(y?+?1)?/?9,?(y?+?1)?%?9);
????else
????????for(xy[x][y]?=?1;?xy[x][y]?<=?9;?xy[x][y]++)
????????????if?(check(x,?y))
????????????????search(x?+?(y?+?1)?/?9,?(y?+?1)?%?9);
????return;
}
int?main()?{
????int?i,?j;
????for(i?=?0;?i?<?9;?i++)
????????for(j?=?0;?j?<?9;?j++)?{
????????????scanf("%d",?&num[i][j]);
????????????xy[i][j]?=?num[i][j];
????????}
????search(0,?0);
????return?0;
}
1 回答
已采納

klipdas
TA貢獻(xiàn)3條經(jīng)驗(yàn) 獲得超1個(gè)贊
check函數(shù)里第一個(gè)for循環(huán)判斷當(dāng)前格子里的數(shù)和橫豎的格子里的數(shù)是否相同,第二個(gè)for循環(huán)判斷與所在九宮格里的數(shù)是否相同。
search函數(shù)else里是給當(dāng)前格子里賦值,調(diào)用check函數(shù)判斷賦的值對(duì)不對(duì),if else是當(dāng)前格子里是本來(lái)就給的數(shù)字,那么再對(duì)下一個(gè)格子進(jìn)行判斷,if是所有的都填完了,打印整個(gè)數(shù)獨(dú)。
最后是主函數(shù),先讓用戶(hù)輸入數(shù)獨(dú),將num數(shù)組賦給xy數(shù)組(應(yīng)該是要保留原始的數(shù)獨(dú)),再執(zhí)行search函數(shù)。
- 1 回答
- 3 關(guān)注
- 1774 瀏覽