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的认识、项目中类与函数的重要性。虽然完成过程很曲折,但总的下来感觉收获很多,相比,对于将来开发项目会有所帮助。