軟工基礎個人項目——數獨2


GITHUB項目地址:

https://github.com/hhz-hhz/Sudoku_software_engineer.git

軟工基礎個人項目——數獨1

二、設計階段

3、解題思路補充

由於需求中對程序的性能有一定的要求,所以我進行了對於我所要使用的方法的性能進行分析。

生成終局:在網上查閱了一系列關於全排列加平移的方式生成終局的程序,並且對其的性能進行調研,發現生成1000000個終局才用這種方法大部分都只需要40秒左右的時間,然后對其進行細致的分析后,發現大部分的時間都是對於文件的讀取和寫入操作消耗的,可以通過優化讀取和寫入方式來改進以獲取更優的時間,例如使用與系統相關的輸入輸出函數,fscanf、fprintf等,對於文件進行寫入操作時通過寫入一個一個的數獨矩陣也可以較好的減小時間消耗,對於平移算法的優化也是必不可少的。對於函數,可能還可以使用內聯函數進行優化。

求解數獨:通過網上的搜索,同樣發現其實消耗大部分時間的依舊是讀取寫入操作,本來最擔心的dfs的求解方式,也並沒有占據最大的比重。可以同上述生成終局的方式進行優化,如果最終性能不符合要求,就只能去換一種更加省時的做法。

4、設計文檔

(1)、程序流程圖

 

 

(2)、命名規范

函數以及重要變量采用駝峰命名,動詞+名詞

(3)、函數設計以及函數流程

int ChageStringToNumber(char s[]);中通過使用isdigit( )函數判斷是否是數字

void WritePutsToFile(FILE* fp, SUDOKU m);中采用粗魯的直接9個輸入會產生更小的時間消耗

bool GeneratingSudoku(int n);中采用next_permutation( )生成全排列,使用兩倍的第一行的數組來移位得到下面的行,void MovingStep()獲取平移位數矩陣MovingStepDic[72][9]

bool SolvingSudoku(FILE* rfp):除上述外還需要讀取文件中的數獨矩陣DoSudoku,以及設置完成標志sign

目前的PSP 2.1表格:

軟工基礎個人項目——數獨3

軟工基礎個人項目——數獨4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM