软工实践第二次作业
軟件工程實踐第二次作業
github鏈接
解體思路
一開始拿到題目,沒有仔細往后看,把題目當作解數獨了。
解數獨的話,一開始就想到大一好像寫過八皇后,也是有約束條件,然后深度搜索解決。
但是想看看有沒有什么優化,結果是看到了這篇博文數獨解法小探,里面用了五種方法:回溯法,排列組合法,精確覆蓋問題法,模擬退火法以及約束編程法,看著看著就發呆了==。在這個頁面上一臉懵逼了好久,后來發現題目看錯了,就跑去想怎么解決題目,就沒有繼續看解數獨了,現在還是懵逼中...
要生成數獨矩陣的話,其實一開始也是想到,可以用解數獨的方法來生成數獨,一個個判斷過去,不行就回溯。因為前面寫過解數獨的回溯,所以生成數獨的回溯算法就很好理解了。
查找資料的過程中,看到了《編程之美》中有關于數獨的生成方法,普通的方法也是采用回溯,還有一種方法是用置換矩陣的方法。
放出圖片是想說明,采用置換的方法,思想真的超級簡單,隨便在博客上記錄下這種思想....但考慮到作業中與學號要關聯,想到用回溯比較簡單,就采用回溯了...
設計實現
程序比較簡單,就只有兩個函數,一個check函數是否符合數獨的約束條件,一個checkInput函數檢查運行參數的合法性。至于生成數獨直接在主函數中采用兩個while循環輸出了,如果用遞歸的話,可能會消耗非常多的內存。
代碼說明
核心代碼就是兩個while循環,主要是回溯法的思想
當發現不能符合約束條件時,設置
測試運行
對于使用參數運行的設置
性能分析
測試時我采用直接在exe中輸出,得到的分析圖:
由于生成數獨文件直接在main中輸出了,這是main函數的分析圖
在生成多個數獨矩陣時,程序輸出占了主要。
PSP表格 (感覺寫程序時好像沒有注意這邊,現在回想可能比實際誤差非常大)
| Planning | 計劃 | ||
| · Estimate | · 估計這個任務需要多少時間 | 20小時 | |
| Development | 開發 | - | - |
| · Analysis | · 需求分析 (包括學習新技術) | 6小時 | 8小時 |
| · Design Spec | · 生成設計文檔 | 2小時 | - |
| · Design Review | · 設計復審 (和同事審核設計文檔) | - | - |
| · Coding Standard | · 代碼規范 (為目前的開發制定合適的規范) | 10分鐘 | - |
| · Design | · 具體設計 | 2小時 | 3小時 |
| · Coding | · 具體編碼 | 3小時 | 4小時 |
| · Code Review | · 代碼復審 | 20分鐘 | 30分鐘 |
| · Test | · 測試(自我測試,修改代碼,提交修改) | 1小時 | 2小時 |
| Reporting | 報告 | 1小時 | 2小時 |
| · Test Report | · 測試報告 | - | - |
| · Size Measurement | · 計算工作量 | - | - |
| · Postmortem & Process Improvement Plan | · 事后總結, 并提出過程改進計劃 | 10分鐘 | 20分鐘 |
| 合計 | 15小時40分鐘 | 20小時 |
思考與總結
這次的作業,做的比較匆忙。最大的收獲是對回溯法的使用。還有對git的使用更加熟練了,而且開始學會使用gitignore了,同時也學到了怎么輸入參數測試exe以及vs的使用和性能分析。一開始自己想著如何實現,后來代碼寫得一直有問題,也找不出來錯誤。好在看了網上的一些博客順利解決了。其實實現起來,沒有想象的那么復雜。遇到問題不要害怕,應該多學會Google解決。
轉載于:https://www.cnblogs.com/hish/p/7500682.html
總結
- 上一篇: mac中NSScrollView自定义滑
- 下一篇: pip install cryptogr