GitHub地址:https://github.com/ZZZ-JC/sudoku
PSP2.1 |
任务内容 |
计划完成需要的时间(min) |
Planning |
计划 |
30 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
10 |
Development |
开发 |
1800 |
Analysis |
需求分析 (包括学习新技术) |
60 |
Design Spec |
生成设计文档 |
- |
Design Review |
设计复审 |
- |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
40 |
Design |
具体设计 |
- |
Coding |
具体编码 |
400 |
Code Review |
代码复审 |
30 |
test |
测试(自我测试,修改代码,提交修改) |
400 |
Reporting |
报告 |
420 |
Test Report |
测试报告 |
360 |
Size Measurement |
计算工作量 |
30 |
|
Postmortem & Process Improvement Plan |
事后总结 ,并提出过程改进计划 |
60 |
Summary |
合计 |
3640 |
生成数独终局
我的想法就是使用深搜与回溯法来解决这个问题,为了是数独更加具有随机性,减少重复性,可以先找出数独中第一行九个数,然后根据这九个数去进行输入,面对每一个空,从1到9循环一次,并经过三次判断,即行判断、列判断以及九宫格判断,如果满足即填入该空格,然后退出函数与循环。(当然,只让第一行进行随机排序,导致数独随机性不是很强)
求解数独
同理使用深搜和回溯来做,输入一个数独残局,从头开始搜,遇到0时,则进行三次判断,即行判断、列判断以及九宫格判断,如果没问题则填入,开始搜索下一个为0的格子,如果不行,找下一个可以成功的数,如果还不行就继续回到上一步。
函数
建立随机树种子的类,生成随机数。
建立了四个函数random(),backtrace(),fc(),xuehao()。random()用于根据头文件找出1-9的随机数;xuehao()用于使生成数独终局时,第一行第一列的数字是根据我的学号生成的;fc()用于判断这个生成的随机数在当前位置与行、列、九宫格中其他数字是否冲突,冲突则舍去;backtrace()用于进行深搜一直找到合适的数独,同时他也具有在遇到不合适的数据时,回溯到上一步的作用。在生成数独终局中需要用到上述四个函数,而求解数独中只需要用到backtrace()与fc()。
性能分析图
行、列、九宫格判断
深搜与回溯
生成随机数种子
PSP2.1 |
任务内容 |
实际完成需要的时间(min) |
Planning |
计划 |
50 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
20 |
Development |
开发 |
2000 |
Analysis |
需求分析 (包括学习新技术) |
90 |
Design Spec |
生成设计文档 |
- |
Design Review |
设计复审 |
- |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
40 |
Design |
具体设计 |
- |
Coding |
具体编码 |
500 |
Code Review |
代码复审 |
30 |
test |
测试(自我测试,修改代码,提交修改) |
550 |
Reporting |
报告 |
500 |
Test Report |
测试报告 |
420 |
Size Measurement |
计算工作量 |
- |
|
Postmortem & Process Improvement Plan |
事后总结 ,并提出过程改进计划 |
80 |
Summary |
合计 |
4280 |
感想
这次的项目作业对于我们来说很陌生,我们之前没有接触过这样的作业,所以在完成的过程中,我们遇到了很多的问题。解决这一个个的问题便成为我们学习的一个个的脚印,在这次的作业中,我学习到了很多新东西,例如:github的注册以及上传文件的方式、对于PSP的认识、项目中类与函数的重要性。虽然完成过程很曲折,但总的下来感觉收获很多,相比,对于将来开发项目会有所帮助。