2020软件工程作业03

软件工程 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之类的全是网上翻阅资料,但是还是存在问题。嗯......后续在改吧...
嗯...先及格再说。

八、自我评价

posted @ 2020-03-28 23:58  我就随便起个名  阅读(188)  评论(0编辑  收藏  举报