這樣減少了9個深度在破解,發現成功的概率還是只有50%左右,仍然還是會有近一半的可能陷入死迴圈的遞迴中,所以還是需要進一步減少深度。
在此期間,我發現如果計算機能夠解出數獨,時間是幾百毫秒的,如果解不出,估計電腦燒起來了也動不了,所以這時候可以選擇折中的辦法,減少深度,增大重複計算的次數。 也就是說在已經填好的9*9格仔中隨機填入少量的隨機數,雖然不一定有解,但是只要填入的隨機數不是太多,有解的概率還是挺大的。例如隨機數數目n=6是,平均重複24次,但是計算機破解成功的概率是100%; 時間在2秒左右。
具體**是:
其次,還可以把第一列的數字填滿,這樣不需要填入隨機數就可以了,而且效率更高,我也是這樣做的。
這樣計算機就可以得到乙個完整的數獨了,雖然時間長了點,但是不會使遞迴失去響應,還是挺不錯的。
如果大家有什麼更好的想法,也麻煩大家賜教呀! 好好學習,天天進步。
個人專案 數獨的生成與求解(1)
psp 解題思路 實現乙個命令列程式,程式能夠 1.生成不重複的數獨終局檔案 2.讀取檔案內的數獨問題,求解並將結果輸出到檔案 在命令列中使用 c引數加數字n 1 n 1000000 控制生成數獨終局的數量,例如 suduku.exe c 20 將生成的數獨終局用乙個文字檔案的形式儲存起來,每次生成...
個人專案數獨 2 需求分析與思考
我們都多少了解過數獨遊戲,數獨是一種運用紙 筆進行演算的邏輯遊戲。玩家需要根據9 9盤面上的已知數字,推理出所有剩餘空格的數字,並滿足每一行 每一列 每乙個粗線宮 3 3 內的數字均含1 9,不重複。數獨盤面是個九宮,每一宮又分為九個小格。在這八十一格中給出一定的已知數字和解題條件,利用邏輯和推理,...
數獨的隨機終盤生成函式設計
首先,我採用的策略是隨機生成終盤,而不是由乙個終盤排列組合出100w個 所以我又得滿足隨機性與時間的要求了。在動手前,我去網上搜了一些數獨終盤的生成函式,發現大體上有兩種演算法 1.每格都在可能的數中隨機生成,如果碰見沒數可填的地方,就把該行或者是更多的指定的格仔刪除,再隨機的跑一遍。每格地方都設定...