软件工程基础——数独终局生成与求解(二)
一、代码链接
Github地址:https://github.com/tennisintheworld/sudoku
三、项目设计与实现过程
3、设计实现过程
(1)函数设计
函数可分为三部分:生成终局的函数和终局输出函数,数独问题的输入输出函数,求解数独的函数和结果输出函数(可以使用终局输出函数)。
- 生成终局的函数和终局的输出函数:void buildans()函数进行数独的全排列构造;void buildsudoku(char* row1rule, char* row2rule, char* row3rule)函数生成数独终局和终局打印需要的空格和换行符号;void outputbuildsudoku()输出生成的终局到文件。
- 数独问题的输入输出函数:void inputsudokuquestion(int row, char* save)函数用来从文件读取数独问题;
- 求解数独的函数和结果输出函数:void solvesudoku(int a, int b)函数用来对数独问题进行求解;void outputsolvesudoku()函数用来输出答案。用回溯法求解数独时,用到了标记数组vis,还可以用三个函数表示标记数组的行为,void setvis(int a,int b,int num),void resetvis(int a,int b,int num),bool checkvis(int a,int b,int num)。
(2)单元测试设计
采用静态测试和动态测试相结合:在输出终局和结果到文件之前,可以先把储存结果和终局的数组打印出来看一下,先用小规模的测试用例试一下。如果是一些短的代码可以直接走读过一遍,看看有没有什么错误和可以改进的地方。