如何做乙個解任意數獨的程式?

時間 2021-06-17 08:14:59

1樓:真可啪

任意數獨,沒嘗試過。

不過我自己解數獨的話,是這個樣子滴。(9x9標準數獨)

標準數獨長這樣。

要求,每1x9橫排,9x1豎排,以及從左上到右下9個互不重疊的3x3小方格中的數字不重複。

因此,可以有以下幾個規則。

0:認為為乙個【區域】。

1:決定每乙個位置上的數字時,排除它所在三個區域中出現過的1-9的數字。

比如,橫排中出現了123,豎排中出現了789,小方格中出現了46,那麼這個位置就是5。

記不住的話,決定每乙個位置上的數字時,可先寫出1-9全部的數字,然後,把在三個區域中出現的數字抹掉,剩下的稱為【 可能數字 】。

2:標記出所有的【 可能數字 】後,進行第二遍掃瞄,將同區域中,在其他位置上的沒有出現過的【 可能數字 】記為這個位置上的數字。

比如,乙個1x9橫排中,出現了已經被確定的12345,而沒被確定的位置上,只有乙個位置的【 可能數字 】中含有8,那麼,該位置,就必定是8。當然,你前面做的有問題,這裡是一定會有問題的。

你需要每次確定乙個位置上的數字後,就將其所在的三個區域中所有的【 可能數字 】裡,把被確定的數字取消掉。

比如在乙個1x9橫排中,出現了上述的情況,確定8的位置所在的小方塊、9x1豎排中的【 可能數字 】中把所有的 8 全去掉。

3:第三個不是特別好描述。舉例子吧。

比如說,在乙個1x9橫排中,出現了好幾個位置都只有【 可能數字 】,且只有兩個位置上的【 可能數字 】中只有 2 和 9 (其他位置上的 【 可能數字 】中可以有也可以沒有),那麼這一行中,其他位置上的 【 可能數字 】 中,要把 2 和 9 去掉。

(就好像,這一行中,有1 34 67 ,缺2589,有四個空位,這四個空位上的可能數字,分別如下,A:258,B:259,C:

29,D:29,那麼,C、D 兩個位置上,一定是乙個為2、乙個為9 ,那麼A、B兩個位置中,2和9就應該取消掉,A:58,B:

5,於是B確定為5,所以把A【 可能數字 】中的5取消,A:8,A也確定。)

再比如,在乙個1x9橫排中,出現了好幾個位置都只有【 可能數字 】,且只有三個位置上的【 可能數字 】中只有 2 7 9 (其他位置上的 【 可能數字 】中可以有也可以沒有),那麼,這一行中,其他位置上的【 可能數字 】 中,要把 2 7 9 去掉。

再比如,4個的,5個的……

我所遇見的所有情況,都可以用這三個規則解決,因此,你可以考慮,用這三個規則為思路,寫出演算法,解決你遇見的 9x9標準數獨的問題。

其它數獨,我想可能也大同小異吧。

~~~當天修改

當然,可能會出現最後只剩下兩個空位兩個選擇的情況,且兩個空位怎麼填都可以。這樣的話,會讓程式卡住,這裡請自己處理。

2樓:

簡單一想的話大概可以用回溯去做,從左上角第乙個空開始從1開始,每次列舉乙個數字馬上遞迴到下乙個,重複此過程直到最後乙個位置,如果遞迴過程中發現違反了規則就退回到上乙個位置繼續列舉下乙個數字,如果成功遞迴到了最後乙個位置而且沒有違反規則那就得到答案了。

如何做乙個程式設計師而不是碼農?

我覺得這問題有點扯淡。研發工程師 程式設計師 碼農。如果你是在正式的工作場合,比如崗位介紹 企業宣傳。那必然都是稱之為 研發工程師 如果是在非正式場合但是也比較正經,比如相親 向家裡人 網路用詞介紹。稱之為程式設計師更容易理解。所以何必再辭藻上區分的那麼清楚呢?引用呼蘭的一句話 大家都是狗,你這是幹...

如何做乙個好人?

早安 我認為好人的定義是會隨著年紀的增長而不斷改變的當我小時候,我認為能夠給我糖吃的人都是好人,關心我愛護我的人就是好人長大之後我以為遵守社會主義核心價值觀的那些人才是好人現在我覺得能夠利用這個社會的規則,不損壞他人利益,努力獲取財富,讓我這個小家過的更好,能力範圍內幫助身邊有困難的人,就是好人。我...

如何做乙個爸爸?

乙個單身的38度6 為什麼你的心怎麼脆弱呢,為什麼你有這麼極端的想法呢?你這是報復別人懲罰自己讓自己受苦受累值得嗎?你為一人已經不愛你和你分手的人要死要活值得嗎?不值得所以你一定要想開點.未來的路還有很長一段要走,別輕易放棄自己的未來 機器貓小鑽風 大男人乙個,7尺男兒,怎麼會有這種想法?這個世界離...