Github项目地址:https://github.com/yxyolo/031702108
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
---|---|---|---|
Planning | 计划 | 0.5 | 0.5 |
Estimate | 估计这个任务需要多少时间 | 24 | 16 |
Development | 开发 | 18 | 13 |
Analysis | 需求分析 (包括学习新技术) | 0.5 | 0.5 |
Design Spec | 生成设计文档 | 0 | 0 |
Design Review | 设计复审 | 0 | 0 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 1 | 0.5 |
Design | 具体设计 | 2 | 2 |
Coding | 具体编码 | 12 | 9 |
Code Review | 代码复审 | 3 | 2 |
Test | 测试(自我测试,修改代码,提交修改) | 3 | 2 |
Reporting | 报告 | 1 | 1 |
Test Repor | 测试报告 | 0 | 0 |
Size Measurement | 计算工作量 | 0.5 | 0.5 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 1 | 0.5 |
合计 | 24 | 16 |
解题思路
一开始拿到题目的觉得非常难,无从入手,自己没有玩过数独,也不知道数独有什么技巧,就去网上查找解数独的技巧,结果很多都是观察法,好像与算法没什么关系,感到更绝望了....后来突然就想到去搜索用算法解数独,看到了回溯法,好像一下子看到了一点光明,突然有了思路,发现其实也没想象的那么难,就用傻瓜式的一遍遍试就好了,出错了就回去试另一条路(应该还有更好的方法,有待继续发现!)
主要代码
主要采用回溯的思想,简单说就是不撞南墙不回头,这条路走不通就试另一条
求解函数
从第一格遍历至最后一格,如果该位置不为零,则求解下一个位置;如果该位置为零,从1-阶数,一个个试可以填哪个数字。如果再下一格没有数字可填,则回到上一格,继续尝试其他的数字。(大概思路,不详细说最后一格的差别了)
判断函数
判断这一格填这个数字是否可行,遍历这一格所在的行、列、宫,若没有重复数字,则可行。这里我把每一种阶数分开讨论,后续有待改进。
主函数
主函数中包含了对文件的读取部分
输出函数
读取和输出我觉得是个难点,之前从没有尝试过这样的。后面是请教了同学才写出来的,还有些用法不大理解。
代码改进
增加了对无解的判断,count初始值为0,若有输出,count++ ; 若最后count==0,判定为无解。
测试结果
命令行
3-9阶的测试结果如下
性能分析
emmmm参数看不太懂....
心路历程与收获
写出来的时候感觉非常的有成就感。很多东西大概不像想象中的那么难,只是我们习惯望而生畏罢了,所以要多尝试呀。
最大的收获大概就是回溯法和输入输出函数的用法了,虽然还不是掌握的很好。之后更深入地学习吧!