如何用乙個演算法求解乙個不標準數獨所有解

時間 2021-05-07 03:51:00

1樓:潘民科

你也可以把數獨轉化為乙個邏輯電路問題,沒舞蹈鏈快但也是一百毫秒內解決

A SATisfying Sudoku solver

2樓:Psiphon

我也覺得用迴圈暴力試就行才81個數字

C語言實現就這樣

#include

intCheck_Square

(int(*

a)[9],

introw

,int

cln,

intnum

);int

Check_Row

(int(*

a)[9],

introw

,int

cln,

intnum

);int

Check_Cln

(int(*

a)[9],

introw

,int

cln,

intnum

);int

Check

(int(*

a)[9],

introw

,int

cln,

intnum

);int

isDone

(int(*

a)[9]);

void

outPut

(int(*

a)[9]);

void

Calc

(int(*

a)[9]);

intmain

(void);

Calc(a

);return0;

}int

Check_Square

(int(*

a)[9],

introw

,int

cln,

intnum

)int

Check_Row

(int(*

a)[9],

introw

,int

cln,

intnum

)int

Check_Cln

(int(*

a)[9],

introw

,int

cln,

intnum

)int

Check

(int(*

a)[9],

introw

,int

cln,

intnum

)int

isDone

(int(*

a)[9]

)void

outPut

(int(*

a)[9])

}void

Calc

(int(*

a)[9]

)for(i

=0;i

<9;i++)}

if(k==

10)}}}}

3樓:星辰大海呀

想寫個程式,但是程式怎麼寫啊?

多叉樹不就是乙個節點有多個兒子嘛,怎麼實現多叉樹不是問題,問題是怎麼用多叉樹來求解,題主要是連多叉樹都不知道怎麼實現,我覺得你這個步子跨的有點大,當心扯著蛋咯

4樓:

先不說程式怎麼寫,先說說數獨怎麼解。數獨是根據9×9盤面上的已知數字,推理出所有剩餘空格的數字,並滿足每一行、每一列、每一宮內的數字均含1-9,不重複也不遺漏。

這是所有數獨玩家都必須遵守的規則。但是有一點沒有明確,導致現在還存在爭議。

那就是,數獨解的唯一性。

已經有理論證明,數獨至少需要 17 個初始數字才有唯一解,16 個初始數字的數獨不存在唯一解。(700萬小時搞定最小數獨問題 | 科學人 | 果殼網科技有意思),

不過,超過了17個初始數值的數獨,在有解的前提下,也不能保證解是唯一的。乙個極端的例子是這樣的:

給你77個初始值,然後數獨的解還是不唯一的,上面這種模式被稱為Dead Pattern。

關於數獨的解是否應該唯一,目前尚存在爭議。因為數獨的要求中並沒有對解的個數做出限制。對於這個爭議,又帶來了另外乙個爭議,後面馬上就會提到。

目前一般情況下都認為唯一解的數獨才是良性的,也就是所謂的標準數獨。這種數獨能夠使用純粹的邏輯推理(不過暴力窮舉到底算不算邏輯推理,這也是值得商榷的,暴力窮舉在邏輯上是完備的,但是個人不認為是純粹的邏輯推理得到最終的唯一解。前面提到解的唯一性爭議,導致大家在研究數獨求解策略的時候,又發展出一種叫做Uniqueness的技巧,也就是為了保證解得唯一性,某個單元格中不能填某個數(為了大局著想,請這個候選數做出犧牲),或者說某個單元格必須填某個數(這個數就是解決困局的Hero)。

當然,這種假設是建立在數獨的解為唯一的前提下的,所以這種技巧能否作為真正的策略,也是存在爭議的。應用這種策略,有點抄近道的味道,如果數獨有解,則這個方法一定可以找到乙個解,如果數獨確實有且只有乙個解,那麼這個解就恰好是所求的。但是,在數獨在有多個解的時候,必然會漏掉一些解(因為在用這個方法時已經隱含應用了解是唯一的前提條件)。

具體演算法?挑乙個待定的單元格(原則上任何乙個都行,但是,推薦選候選數較少的單元格),然後開始嘗試。當所有單元格都填滿,而且符合數獨規則的時候(檢驗答案是否正確的工作,乙個幼兒園的小朋友都能完成),就認為找到了乙個解,然後再換下乙個,要麼最後得到乙個或者多個解,或者最後檢驗出無解。

說到這裡,不知道你有沒有覺得數獨問題和八皇后類似,八皇后是什麼演算法?回溯演算法啊。

另外,還有些提到了舞蹈鏈的演算法,也就是精確覆蓋問題,不過似乎這種演算法求解數獨,效率還沒有暴力法高。

演算法問題,乙個人在1 100中任選乙個數,另乙個人來猜?

100innovate 第二題我感覺需要用到線段樹的知識,猜測每乙個數的成本與數的大小成正比其實是乙個不合理的假設 事實上需要採取一些方法將複雜度轉化。 supersarah 沒有數學驗證,全憑感覺,最近懶得動腦.版本一 對樣本等概率分布,對分查詢 版本二 我們把橫軸由 樣本 換成 猜測成本 那麼,...

如何設計乙個演算法,使得任何數輸入後經過運算都能得出114514

初值任意,用下面的公式迭代 x n 1 154940.2022 cos x n 154940.2022 用例 想知道你的命運嗎?拿乙個支援答案暫存器 Ans 的科學計算器,輸入你的生日 YYYYMMDD 按等號存入 ANS 暫存器,再輸入 154940.2022 cos ANS 154940.202...

問乙個演算法?

栗子 我覺得,作為乙個新增了這麼多演算法競賽類標籤的問題,不給資料範圍是在耍流氓哦。如果只有20個物品,我完全可以暴力列舉啊233333 可以將問題 判斷無向圖G是否有大小為m的clique 規約到此問題 1.圖G中的每個頂點對應乙個物品,代價為0。2.若點u和點v間有邊,則增加乙個tuple u,...