软件工程实践2019第三次作业

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-阶数,一个个试可以填哪个数字。如果再下一格没有数字可填,则回到上一格,继续尝试其他的数字。(大概思路,不详细说最后一格的差别了)
软件工程实践2019第三次作业_第1张图片

判断函数
判断这一格填这个数字是否可行,遍历这一格所在的行、列、宫,若没有重复数字,则可行。这里我把每一种阶数分开讨论,后续有待改进。
软件工程实践2019第三次作业_第2张图片

主函数
主函数中包含了对文件的读取部分
软件工程实践2019第三次作业_第3张图片

输出函数
读取和输出我觉得是个难点,之前从没有尝试过这样的。后面是请教了同学才写出来的,还有些用法不大理解。
软件工程实践2019第三次作业_第4张图片

代码改进

增加了对无解的判断,count初始值为0,若有输出,count++ ; 若最后count==0,判定为无解。
软件工程实践2019第三次作业_第5张图片

测试结果

命令行
软件工程实践2019第三次作业_第6张图片

3-9阶的测试结果如下

软件工程实践2019第三次作业_第7张图片
软件工程实践2019第三次作业_第8张图片
软件工程实践2019第三次作业_第9张图片
软件工程实践2019第三次作业_第10张图片

性能分析

emmmm参数看不太懂....

软件工程实践2019第三次作业_第11张图片
软件工程实践2019第三次作业_第12张图片

心路历程与收获

写出来的时候感觉非常的有成就感。很多东西大概不像想象中的那么难,只是我们习惯望而生畏罢了,所以要多尝试呀。
最大的收获大概就是回溯法和输入输出函数的用法了,虽然还不是掌握的很好。之后更深入地学习吧!

你可能感兴趣的:(软件工程实践2019第三次作业)