BIT软件工程个人项目——数独sudoku
目录:
(点击可页内跳转)
1. 项目地址
2. PSP表格
3. 解题思路描述
——3.1初期思考
——3.2数独终局生成
——3.3求解数独
4. 设计实现
——4.1 类的组织
——4.2 类中主要成员、方法的调用关系
——4.3 单元测试的设计及代码覆盖率测试
5. 程序优化
6. 代码说明
7. 心得感悟
1. 项目地址
根据要求所有代码在更新过程中托管在github上,一有文件更改就签入。为了方便各位阅读代码,在编程过程中,我给每个文件,每个成员,每个函数方法,都做了极其详细的注释。
交上项目地址:https://github.com/EasonGuo666/MySudoku
2. PSP表格
PSP | Personal Software Process Stages | 计划用时(min) | 实际用时(min) |
---|---|---|---|
PLANNING | 计划 | - | - |
----estimate | 估计这个任务需要多长时间 | 10 | 10 |
DEVELOPMENT | 开发 | - | - |
----analysis | 需求分析(包括学习新技术) | 120 | 200 |
----design spec | 生成设计文档 | 60 | 80 |
----design review | 设计复审(和同事审核设计文档) | 30 | 20 |
----coding standard | 代码规范(为目前的开发制定合适的规范) | 10 | 10 |
----design | 具体设计 | 20 | 60 |
----coding | 具体编码 | 1200 | 1800 |
----code review | 代码复审 | 300 | 300 |
----test | 测试(自我测试,修改代码,提交修改) | 120 | 200 |
REPORTING | 报告 | ||
test report | 测试报告 | 20 | 60 |
size measurement | 计算工作量 | 10 | 10 |
postmortem & process improvement plan | 事后总结,并提出过程改进计划 | 180 | 100 |
合计 | 2080 | 2850 |
3. 解题思路描述
------3.1初期思考
最初拿到这个题的时候,心里一阵翻腾。老师让用github托管代码,这个我之前学过一些,应该问题不大。难点就在于如何设计完成题目中很多细碎的功能。其实在老师给的文档里题目中的主要功能已经被分解成了两个大的部分:“数独终局生成”和“求解数独”。剩下的就是一些性能上的优化以及命令处理时候的程序容错性要求了,例如:如果输入错误命令的话会提示错误输入;如果输入sudoku.exe -c 20和sudoku 20 -c应该都可以完成生成20个不同数独终局的功能。下面就来讨论如何生成终局和求解数独。
------3.2数独终局生成
要求是:生成规定数量的各不相同的终局。在思考过程中,我有过两个想法。
(1)最开始的想法是:对一个给定的数独终局,交换两个数的位置,这样生成的终局跟原来的终局肯定不一样。用这种方法:给定一个终局,我们可以生成45个不同的终局。但是呢,,这种方法有个弊端,有时候两个不同的终局交换数字后生成的终局可能是重复的,而且难以找到一个方法来避免这种重复。所以这种想法在我看来不是很可行。
比如:a交换1,9之后,b交换4,5之后,下面两个终局产生的新终局是一样的。
a:······························b:
1 2 3 4 5 6 7 8 9············9 2 3 5 4 6 7 8 1
4 5 6 7 8 9 1 2 3············5 4 6 7 8 1 9 2 3
7 8 9 1 2 3 4 5 6············7 8 1 9 2 3 5 4 6
2 3 4 5 6 7 8 9 1············2 3 5 4 6 7 8 1 9
5 6 7 8 9 1 2 3 4············4 6 7 8 1 9 2 3 5
8 9 1 2 3 4 5 6 7············8 1 9 2 3 5 4 6 7
3 4 5 6 7 8 9 1 2············3 5 4 6 7 8 1 9 2
6 7 8 9 1 2 3 4 5············6 7 8 1 9 2 3 5 4
9 1 2 3 4 5 6 7 8············1 9 2 3 5 4 6 7 8
(2)