软件工程 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1 |
---|---|
本作业要求 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494 |
这个作业的目标 | 个人编写程序 |
作业正文 | 本篇 |
其他参考文献 | https://www.bilibili.com/video/BV1rJ41177wD?t=169 |
1、Github项目地址
https://github.com/Michael-ZHANGG/20177619
2、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(小时) | 实际耗时(小时) |
---|---|---|---|
Planning | 计划 | 1 | 1 |
Estimate | 估计这个任务需要多少时间 | 12 | 15 |
Development | 开发 | 4 | 4 |
Analysis | 需求分析 (包括学习新技术) | 1 | 1 |
Design Spec | 生成设计文档 | 1 | 1 |
Design Review | 设计复审 | 1 | 1 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 1 | 1 |
Design | 具体设计 | 1 | 1 |
Coding | 具体编码 | 5 | 5 |
Code Review | 代码复审 | 3 | 4 |
Test | 测试(自我测试,修改代码,提交修改 | 1 | 2 |
Reporting | 报告 | 1 | 2 |
Test Repor | 测试报告 | 1 | 2 |
Size Measurement | 计算工作量 | 1 | 1 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 0.5 | 0.5 |
合计 | 21.5 | 26.5 |
三、解题思路
看到数独问题,我的第一反应就是万能破解大法——暴力破解。是的,就是递归加回溯,简称dfs算法。
具体思考回路:在不违反数独规则的前提下,我们从左到右,从上到下,总是选择可以填入最小的数。如果碰到无解,我们返回上一步,寻找下一个最小的数字填入,如果仍然无解,我们继续重复这个步骤。除非这个数独无解,不然总是能找到答案滴!
四、设计实现过程
1、函数模块
- 输出文件模块
- 合法性判断模块
- 递归回溯算法模块
- 主函数模块
2、具体函数设计
-
output函数:
将得到的二位数组写入output.txt
-
check函数:
对当前坐标进行行列是否重复判断
对当前坐标进行区块是否重复判断
-
dfs函数
对数组全局遍历
调用check函数进行合法性判断
当前无解,回溯上一步
边界值判断
调用output函数输出结果
-
main主函数
读取input.txt文件
调用dfs函数,从数组第一个数进行判断
判断是否有结果
3、流程图
五、改进程序性能
1、静态检查
最先开始在dev c++上写的 上图
一气呵成 信心满满 然而......
行行行 慢慢改 于是:
但是中间还是有一个问题:link4075警告?!
我的头文件 #include<stdio.h> 有问题?! 后续再说吧
2、性能分析
还是先上图
老实讲算法和效验函数还可以改进,也就是dfs()和check()。嗯...看来需要学新的解决算,b站大学等我。
3、单元测试
后续补充
6、代码说明及结构#
1、output函数
2、check函数
3、dfs函数
4、main函数
结果展示
直接实现的九宫格......然后一次只能解一个......后续在整吧.......
七、心路历程与收获
说实话,还有一些功能并没有实现,算半阉割版吧。其中输入文件名以命令行参数传入,什么io之类的全是网上翻阅资料,但是还是存在问题。嗯......后续在改吧...
嗯...先及格再说。