亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用獨特的解決方案生成數獨板

如何使用獨特的解決方案生成數獨板

江戶川亂折騰 2019-12-20 10:16:34
如何生成具有獨特解決方案的數獨板?我想的是初始化一個隨機板,然后刪除一些數字。但是我的問題是如何保持解決方案的唯一性?
查看完整描述

3 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

簡單:

  1. 使用高效的回溯算法查找所有解決方案。

  2. 如果只有一種解決方案,那么您已經完成。否則,如果您有多個解決方案,請找到大多數解決方案都不相同的位置。在此位置添加號碼。

  3. 轉到1。

我懷疑您會找到比這更快的解決方案。


查看完整回答
反對 回復 2019-12-20
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

這是我自己的SuDoKu程序執行此操作的方式:


  1. 從完整的有效木板開始(填寫81個數字)。

  2. 列出所有81個單元格的位置,并隨機洗牌。

  3. 只要列表不為空,請從列表中移至下一個位置,然后從相關單元格中刪除該數字。

  4. 使用快速回溯求解器測試唯一性。從理論上講,我的求解器能夠計算所有解決方案,但是為了測試唯一性,當發現多個解決方案時,它將立即停止。

  5. 如果當前電路板仍然只有一種解決方案,請轉到步驟3)并重復。

  6. 如果當前電路板有多個解決方案,請撤消上一次移除的操作(步驟3),然后從列表中的下一個位置繼續執行步驟3。

  7. 測試完所有81個位置后停止。


這不僅為您提供了唯一的電路板,而且還為您提供了在不破壞解決方案唯一性的情況下無法刪除任何其他編號的電路板。

當然,這只是算法的后半部分。上半部分是首先找到一個完整的有效木板(隨機填充?。?,其工作原理非常相似,但“方向相反”:


  1. 從一個空板開始。

  2. 在其中一個空閑單元格上添加一個隨機數(隨機選擇該單元格,并根據SuDoKu規則從對該單元格有效的數字列表中隨機選擇該數字)。

  3. 使用回溯求解器檢查當前電路板是否至少具有一種有效的解決方案。如果不是,請撤消步驟2,然后重復另一個數字和單元格。請注意,此步驟可能會自己產生完整的有效板,但絕不是隨機的。

  4. 重復該操作,直到木板完全充滿數字為止。


查看完整回答
反對 回復 2019-12-20
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

你可以作弊。從可以解決的現有Sudoku面板開始,然后擺弄它。

您可以將三個3x3塊的任何行與任何其他行交換。您可以將三個3x3塊的任何列與另一列交換。在每個塊行或塊列中,您可以交換單行和單列。最后,您可以對數字進行置換,以便在填充位置上存在不同的數字,只要置換在整個板上都保持一致即可。

這些更改都不會使可解決的電路板無法解決。


查看完整回答
反對 回復 2019-12-20
  • 3 回答
  • 0 關注
  • 683 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號