软工基础个人项目——数独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

posted @ 2020-01-08 21:26  picaqiu  阅读(385)  评论(0编辑  收藏  举报