1.15 構造數獨
數獨的棋盤,由9*9=81個小方格組成,數獨要求每一行、每一列、以及每乙個3*3的小矩陣中的數字都不重複
深度優先搜尋,回溯法
從(0,0)開始,沒有處理的呼叫函式獲取可能的取值,取乙個為當前值,搜尋下乙個個子,
搜尋過程中,若出現某個格仔沒有可行值,則回溯,修改前乙個格仔的取值;
#include#include#include// 檢測sd[i][j]上的值是否符合要求
int isok(int sd[9],int i,int j)
else if(isok(sd,i,j))// 滿足條件
}if(k==81)
}return 0;
}
假設已經有乙個3*3的矩陣排列好,把這個矩陣放在**,然後經過各種變換 ,
置換行、列可以得到乙個合法的序列。
#include#includeint main()
printf("initial matrix:\n");
for(i=0;i<3;i++)
for(i=0;i<3;i++)//解決中間,加上下左右
else if(i==1)
else
if(j==0)
else if(j==1)
else}}
for(i=3;i<6;i++)//解決
else if(j==1)
else}}
for(i=3;i<6;i++)
else if(j==7)
else}}
printf("final matrix:\n");
for(i=0;i<9;i++)
return 0;
}
程式設計之美1 15 構造數獨
問題 構造乙個9 9的方格矩陣,玩家要在每個方格中,分別填上1至9的任意乙個數字,讓整個棋盤每一列 每一行以及每乙個3 3的小矩陣中的數字都不重複。首先我們通過乙個深度優先搜尋來生成乙個可行解,然後隨機刪除一定數量的數字,以生成乙個數獨。include include using namespace...
讀書筆記之程式設計之美 1 15 構造數獨
計算機似乎尤其適合解決這類,結合書中提出的兩個解法,以及物件導向的思路,應該把每個3x3格仔作為乙個物件,然後隨機初始化中間格仔,再分別構造上下左右,最後構造四個角上的格仔。不過都涉及到動態規劃,如果有某個格仔找不到答案,還得回退回來找別的答案。之前真沒有玩過數獨,今天正好練習一下,附書後最後乙個練...
POJ 2676 數獨 程式設計之美1 15
演算法講解 low逼演算法dfs,這裡如果不用空間換時間會tle 所以說我們加入三個判斷矩陣 hang x i 第x行有沒有出現i lie x i 第i列有沒有出現i sq x y i 以x,y為首標號的子矩陣有沒有i 然後總結一些常見錯誤 1.每次試探成功,hang,lie,sq都要更新 2.我們...