随机数独的生成
數獨起源于拉丁方陣,由單元格、行、列、宮等元素組成,規則是在每行、每列、每宮的九個單元格中填入數字1-9,不重復。給定一定數量提示數的盤面作為初始條件,稱為初盤。根據規則將所有單元格填滿得到的盤面稱為終盤,也就是數獨的解。標準的數獨初盤只能對應一個終盤。
一般采用隨機方式生成數獨,即從空白的數獨盤面開始隨機填數,填入的數字不能違背數獨的基本規則,并且要保證解的唯一性。在隨機填入過程中,判斷某個位置是否可以填入一個隨機的數是根據這一位置所處行列宮區域中是否已有此數來決定。當填入這一數之后,修改它所處區域的標記信息。當填入的數字達到一定量之后,再進行數獨求解。
數獨的求解常用的生成方法有挖洞法,即挖去一個數獨終盤上某些位置上的數,使其形成的局面只有一個解,即做為數獨初盤。初始的數獨終盤,可根據一定的算法生成,也可以根據某個已知的終盤,進行若干次行列互換或數字的交換等方法得到。
實驗需要我們通過設計算法來輸出不同難度的數獨題目和答案。
其中數獨生成的規則為:根據9X9表盤上面的已知數字,推理出所有剩余空格的數字,并且需滿足每一行、每一列、每個九宮格內的數字均含1-9,不重復。數獨的難度通過對數獨終盤挖掉數字的個數多少來劃分。
①構造數獨規則:先初始化數獨空白表格,在空白數獨中隨機選擇要求個空白單元格,篩選出該單元格滿足條件的數字并填入。
②深度優先算法:定義深度優先算法。
③基礎數獨生成:使用深度優先算法對已經部分填入的數獨進行遍歷求解,輸出基本數獨。
④實現難度劃分:在已經求解完畢的基本數獨上隨機選取單元格,假設扣除該單元格的數字并檢驗扣除后數獨的唯一性,直至成功扣除指定個數的單元格,生成對應難度的數獨題目。再次使用深度優先算法對扣除指定個數單元格的數獨題進行遍歷求解,并輸出對應的數獨答案。
總結
- 上一篇: serverless-knative s
- 下一篇: 【阅读笔记】Falsification