數獨大作業

2021-10-01 13:45:29 字數 1419 閱讀 5010

實現乙個能夠生成數獨終局並且能求解數獨問題的控制台程式。

要求使用引數sudoku -c加數字n(1<=n<=1e6),生成n個數獨終局,並輸出到檔案sudoku.txt中;使用引數-s加檔名,求解檔案中的數獨,並將結果輸出到檔案sudoku.txt中。

psp2.1

personal software process stages

預估耗時(min)

實際耗時(min)

planning

計畫2500

·estimate

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

2500

development

開發2400

·analysis

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

680·design spec

·生成設計文件

60·design review

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

20·coding standard

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

20·design

·具體設計

400·coding

·具體編碼

960·code review

·**複審

20·test

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

240reporting

報告100

·test report

·測試報告

20·size measurement

·計算工作量

20·postmortem & process improvement plan

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

60合計

2500

(1)生成終局的思路:

看到題目的時候第一眼注意到了最多要生成1e6個終局,而且還有效率時間上的限制要求,那麼暴力方法是絕對不行的,時間肯定會超出很多。然後看到了終局左上角第乙個是乙個固定的數字,即(學號後兩位相加)%9+1,那麼剩下的8個數字最多可以排列組合生成8!=40320種組合,然後按一定的方法平移生成其他8行,這樣可以減少時間。

可行性分析:

然而數量上遠遠不夠,在受到旁人指點之後,知道了可以分成三三三的小組,在組內部再次排列組合。前三個由於第乙個不能動,只有兩種平移方式(即036,063的平移規則);第二組的三個有六種(即147,174,417,471,714,741的平移規則),第三組的也是六種(即258,285,528,582,825,852的平移規則)。總共能有2 * 6 * 6 * 40320種,遠大於1e6了。

然後是具體的搜尋方法,我採用了回溯的方法,配合生成的排列數和移動的規則,應該能夠很快的生成終局。

(2)求解數獨的思路

由於數獨肯定有乙個解,所以這種解法肯定能夠找到可行解,不用擔心沒有解而一直回溯。

大作業感悟

作為本次大作業的組長,看著專案從呱呱墜地到瓜熟蒂落,就像看著自己的孩紙長大一樣。心中感慨萬千,成長的過程總是快樂與痛苦並行,喜悅與煩惱同在的。從兩個星期前的頭腦風暴到前期的精心設計 中期的分工實施再到後期的測試與優化。每一步走的都讓 連忘返,每一步都讓人記憶猶新。在這兩個星期中,我們不僅得到了知識和...

爬蟲大作業

1 選乙個自己感興趣的主題。2 用python 編寫爬蟲程式,從網路上爬取相關主題的資料。3 對爬了的資料進行文字分析,生成詞云。4 對文字分析結果進行解釋說明。5 寫一篇完整的部落格,描述上述實現過程 遇到的問題及解決辦法 資料分析思想及結論。6 最後提交爬取的全部資料 爬蟲及資料分析源 impo...

爬蟲大作業

1.選乙個自己感興趣的主題。2.用python 編寫爬蟲程式,從網路上爬取相關主題的資料。3.對爬了的資料進行文字分析,生成詞云。4.對文字分析結果進行解釋說明。5.寫一篇完整的部落格,描述上述實現過程 遇到的問題及解決辦法 資料分析思想及結論。6.最後提交爬取的全部資料 爬蟲及資料分析源 impo...