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,...