數獨 深搜 剪枝 遞迴 回溯

2021-07-30 07:09:15 字數 965 閱讀 4630

數獨是乙個我們都非常熟悉的經典遊戲,運用計算機我們可以很快地解開數獨難題,現在有一些簡單的數獨題目,請編寫乙個程式求解。

輸入描述:

輸入9行,每行為空格隔開的9個數字,為0的地方就是需要填充的。

輸出描述:

輸出九行,每行九個空格隔開的數字,為解出的答案。
思路:深搜+剪枝 == 遞迴+回溯
凡是類似於迷宮的尋找路徑的問題,均可由「遞迴+回溯」。
本題中,從第乙個為0處開始填值,從1-9依次往裡填i,如果當前填的值i深搜的結果為false,則把其狀態還原(回溯),然後繼續填下個值i+1。依次遞迴下去,當一直找到(9,9)時,即成功。
特別注意:每行不能多輸出個空格,即使看不見,也不能多輸出乙個空格。
#include #include #include using namespace std;

#define n 10

int hashrow[n][n];

int hashcol[n][n];

int hashblock[n][n];

int array[n][n];

bool dfs(int i,int j)else if(j==9)

else

j++;

}for (int k = 1; k <=9 ; ++k)

}return false;//填當前空格時,從1到9,沒有乙個能成功,則返回.

}int main()

}if(dfs(1,1))

{for (int i = 1; i <= 9; ++i)

{for (int j = 1; j <= 8; ++j)

{cout<

解數獨(深搜 回溯)

本題hard難度但是解體思路就是很普通的深搜 回溯 需要考慮的點是遞迴的深搜進行的條件和狀態的記錄 用boolean陣列來記錄每個行 列 九宮格裡1 9的存在情況 先遍歷一次原陣列,記錄空格的位置並對boolean陣列進行初始化 然後對空格位置進行dfs。class solution else df...

hdoj 1426數獨 (深搜回溯)

題意就是求數獨的解 數獨遊戲的規則是這樣的 在乙個9x9的方格中,你需要把數字1 9填寫到空格當中,並且使方格的每一行和每一列中都包含1 9這九個數字。同時還要保證,空格中用粗線劃分成9個3x3的方格也同時包含1 9這九個數字。比如有這樣乙個題,大家可以仔細觀察一下,在這裡面每行 每列,以及每個3x...

C 數獨遊戲 遞迴,回溯,驗證是否滿足數獨

你不去做,別人不知道你會做 送給我自己。題設 在9 9的數獨 內輸入幾個數字,自動完成數獨 準備 在充分理解遞迴,回溯之後,完成這個題目就不難了。但是高效能完成就還是得研究。原理概要 採用棧的資料結構模型存入已經輸入過得數獨 此時應該只有幾個 有數字,我們採用乙個標記數字記下這些數字位置,他們是不能...