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