程式設計之美 1 15 構造數獨

2021-06-27 10:10:27 字數 896 閱讀 7670

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.我們...