1. 程式人生 > >軟件工程基礎-個人項目-數獨

軟件工程基礎-個人項目-數獨

lan devel test eve 註釋 算法 post 大量 order

任務:實現一個能夠生成數獨局並且能求解數獨問題的控制臺程序。

1、GitHub:https://github.com/MiaoZhou48/SoftwareEngineeringProject

2、時間耗費

PSD2.1

Personnal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 40 40
.Estimate .估計這個任務需要多長時間
Development 開發 150 120
.Analysis .需求分析(包括學習新技術) 180 200
.Design Spec .生成設計文檔 150 150
.Design Review .設計復審(和同事審核設計文檔) 60 60
.Coding Standard .代碼規範(為目前的開發制定合適的規範) 60 60
.Design 具體設計 80 80
.Coding .具體編碼 1600 1800
.Code Review .代碼復審 100 150
.Test .測試(自我測試,修改代碼,提交修改) 200 250
Reporting 報告 120 150
.Test Report .測試報告 80 100
.Size Measurement .計算工作量 40 30
.Postmortem & Process Improvement Plan .事後總結,並提出過程改進計劃 50 40
合計 2910 3190

3、解題思路:

  此項目可以細分為兩個功能:生成數獨、解數獨。

  生成數獨我考慮采用的是回溯的方法,對殘缺數獨不斷求解,從而得到相應數量的完善的數獨。

  確定好方法之後便是漫長的學習之路,參考了相應的回溯算法的博客以及其他算法的數獨生成博客。

  在學習過程中也見識到了很多新的思路生成數獨,比如說對一個已經合理的數獨進行變換,然後判斷其在變換之後是否依然是符合數獨規範。通過這種方式生成數獨,首先會保證結果的互異性,其次相比於回溯不需要大量的計算,節省了大量的時間。

  但是由於已經開始用回溯算法寫了,所以之後的改進階段會再嘗試一下敢變思路。

4、設計實現過程

  程序主體是3個函數

  judge():解數獨函數中用此函數判斷回溯條件。

  solve():具體的解函數本體。

  construct():構建函數。

  封裝成函數有利於代碼的復用,與此同時提升了程序的簡潔性和可讀性。

  函數邏輯說明:

  

5、性能改進及思路

6、代碼說明(思路解釋+註釋說明)

7、實際耗時

  具體的時間消耗見最上方的表格。

軟件工程基礎-個人項目-數獨