個人專案 數獨的生成與求解(1)

2021-10-01 14:39:41 字數 1669 閱讀 7270

psp**

解題思路

實現乙個命令列程式,程式能夠:

1.生成不重複的數獨終局檔案

2.讀取檔案內的數獨問題,求解並將結果輸出到檔案

在命令列中使用-c引數加數字n(1<=n<=1000000)控制生成數獨終局的數量,例如:suduku.exe -c 20

將生成的數獨終局用乙個文字檔案的形式儲存起來,每次生成的txt檔案需要覆蓋上次生成的txt檔案。要求生成數獨矩陣時,左上角第乙個數字為(學號後兩位相加)% 9 + 1

在命令列中使用-s引數加檔案問的形式求解數獨,並將結果輸出至檔案,例如:sudoku.exe -s absolute_path_of_puzzlefile

psp2.1

personal software process stages

預估耗時(分鐘)

實際耗時(分鐘)

planning

計畫·estimate

·估計這個任務需要多少時間

30development

開發·analysis

·需求分析(包括學習新技術)

400·design spec

·生成設計文件

60·design review

·設計複審(和同事審核設計文件)

40·coding standard

·**規範(為目前的開發制定合適的規範)

20·design

·具體設計

60·coding

·具體編碼

800·code review

·**複審

100·test

·測試(自我測試,修改**,提交修改)

240reporting

報告·test report

·測試報告

60·size measurement

·計算工作量

20·postmortem & process improvement plan

·事後總結,並提出過程改進計畫

40合計

1870

拿到題目後首先思考如何能夠生成特定數量的不同的數獨終局,在網上查詢到一些資料後受到啟發,數獨第一行由數字1~9隨機排列生成,之後的8行依次由第一行向右移動3、6、1、4、7、2、6、8生成,生成乙個完整數獨終局後,還可以通過行列的交換變成不同的數獨終局。左上角數字固定為(3 + 1)% 9 + 1 = 5,故第一行共有8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 40320種可能,為保證3 * 3的矩陣中沒有重複的數字,行交換只能在2 ~ 3行,4 ~ 6行,7 ~ 9行內部交換,共有2 * 6 * 6 = 72種組合,則目前為止能夠生成的數獨終局數量為40320 * 72 = 2903040 > 1000000,能夠滿足題目的要求。

整理思路:

(1)首先生成第一行。第一行第乙個數字恒為5,剩下的8個數字通過全排列進行排放。

(2)生成乙個數獨終局。因為想要簡化**,可以先規定乙個模板,第一行的數字與模板相互對應,之後可以直接使用它們之間的對映關係來生成乙個終局。(3)行交換。每個終局進行行交換可以生成72個終局。

數獨的求解採用深度優先演算法,每個格仔裡的數字通過暴力列舉的方式確定。把空的格仔找出來,從第乙個格仔開始從「1」開始尋找能夠滿足數獨要求的合法填入,找到後對該格仔進行賦值,若沒有找到合法的數字,說明前面有錯誤的填入,此時應該退回到上一格,從沒試過的數字裡繼續嘗試,重複上述步驟。

個人專案數獨

2 每一行都要有1 9這9個數字填入 3 每一列都要有1 9這9個數字填入 4 每一塊都要有1 9這9個數字填入。所以,01模型中列的定義就出來了。i,j,k表示在棋盤上i行j列填入數字k。1到81,表示棋盤中9 9 81個格仔是否填入了數字。如果是,則選取的01行在該01列上有1。對應的01列編號...

個人專案 數獨

個人專案 數獨 再附psp表乙份 personal software process stages 估計耗時 分鐘 實際耗時 分鐘 計畫30 40需求分析 包括學習新技術 00 生成設計文件00 設計複審00 規範00 具體設計 300360 具體編碼 600530 複審 5030 測試200 23...

個人專案 數獨遊戲

數獨 二 生成數獨終局 數獨 三 解數獨 數獨 四 測試與效能分析 數獨 五 總結 數獨 六 ui介面 下面是我預計在專案上花費的時間。psppersonal software process stages 預估耗時 分鐘 實際耗時 分鐘 planning 計畫25 estimate 估計任務用時 ...