數獨描述:在9*9的格仔內,填入1~9,要求每一行每一列不能有重複數,並且,每個格仔所處的3*3格仔內不得有重複數。
分析:這是乙個典型的遞迴回溯演算法,本例中用乙個except[9][9][9]的陣列來構造每個格仔的禁忌表(就是該格仔中不能填入的數)。用變數hs來表示此次填數是向前遞迴運算還是回溯運算。如果是向前遞迴,則計算該格仔的禁忌表,如果是回溯,則將當前格仔中的數加入禁忌表。
#include #include #include #include #include //用於標記是否回溯
int hs=0;
//記錄每乙個格仔的禁忌數字,即當前格仔不能填入的數字
int except[9][9][9];
//儲存結果
int res[9][9];
//隨機獲取乙個值
int getran()
//判斷隨機的值是否在禁忌表
int inforb(int jg,int *fibd)
//判斷禁忌表是否已滿,如果滿則需要回溯
int is_full(int *fbid)
return 1;
}//構造數獨
void gouzao(int i,int j)
//當到第10行的時候遞迴結束
if(i==9)return;
//如果是回溯到當前位置的,則把該值填入禁忌表
if(hs)
else
{ int k,m;
//獲取禁忌表
bzero(except[i][j],sizeof(except[i][j]));
for(k=0;k
結果:
構造數獨和解數獨
數獨,俗稱九宮格,由乙個9 9的網格組成,整個網格又分成9個3 3的小正方形網格,每個格仔有乙個數字 1 9 數獨滿足如下要求 1 每個數字在每一行只出現一次 2 每個數字在每一列只出現一次 3 每個數字在每個3 3的小區域中也只出現一次 如下圖所示,為我們比較常見的數獨形式,為乙個缺了數字的數獨,...
1 15 構造數獨
一 用回溯法構造數獨 include include include include include using namespace std int sudu 9 9 void sudu print int sudu 9 cout endl bool is digital sudu int sudu...
1 15 構造數獨
一 用回溯法構造數獨 include include include include include using namespace std int sudu 9 9 void sudu print int sudu 9 cout endl bool is digital sudu int sudu...