Github项目地址:https://github.com/kekoko/Nya/tree/master/031702248
PSP2.1 | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 1小时 | 1小时 |
Estimate | 37小时 | 42小时 |
Development | 10小时 | 10小时 |
Analysis | 1小时 | 2小时 |
Design Spec | 0.5小时 | 1小时 |
Design Review | 0.5小时 | 1小时 |
Coding Standard | 2小时 | 2小时 |
Design | 2小时 | 1小时 |
Coding | 8小时 | 10小时 |
Code Review | 5小时 | 6小时 |
Test | 1小时 | 2小时 |
Reporting | 2小时 | 2小时 |
Test Repor | 1小时 | 2小时 |
Size Measurement | 1小时 | 1小时 |
Postmortem & Process Improvement Plan | 2小时 | 1小时 |
合计 | 37小时 | 42小时 |
解题思路:
先从九宫格开始,解完九宫格,其他也就解完。
求解数独的算法,一开始不知道从何下手,找了一些资料,发现用回溯法,就可以简单算出。
然后再对算法进行,列和宫进行判断。
写6个函数,一个主函数,其他分别进行输入,解析,判断,输出。
改进
输入输出用fstream头文件和用命令行输入参数用main函数参数,因为没有这方面知识,花了许多时间。
再对判断函数加了其他宫的判断。
数独3宫格 数独4宫格
数独7宫格
数独8宫格
数独9宫格
代码说明
算法
用来求出数独
bool parse_s(int loop) { int i; int j; i = loop / m; j = loop % m; if (loop == m * m) { return true; } if (sudoku_s[i][j] == 0) { for (int number = 1;number <= m;number++) { sudoku_s[i][j] = number; if (judge_ranks(i, j, number) && judge_palace(i, j, number))//判断行,列,宫 { if (parse_s(loop))//判断通过,递归 return true; } sudoku_s[i][j] = 0;//不通过,重置为0,再循环 } } else return parse_s(loop + 1);//不为0,进入下一层递归 return false;
按顺序输入数独,然后解析和输出。
while (!myfile.eof()) { myfile >> sudoku_s[i][j]; count_s++; j++; if (j == m) { i++; j = 0; } if ((count_s == (m * m)) && (N <= n))//假如读出一个盘面,就开始解 { parse_s(0);//解数读 output_s(N);//输出 count_s = 0; N++; i = 0; j = 0; } }
Code Quality Analysis
总结
之前只会写点题,所以花了很多功夫在上面。
也学到了许多新技术,诸如文件的输入输出,github的使用,命令行参数和写博客等。