實現乙個能夠生成數獨終局並且能求解數獨問題的控制台程式。
要求使用引數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...