软工实践第二次作业

软件工程实践第二次作业
github链接

解体思路

一开始拿到题目,没有仔细往后看,把题目当作解数独了。
解数独的话,一开始就想到大一好像写过八皇后,也是有约束条件,然后深度搜索解决。
但是想看看有没有什么优化,结果是看到了这篇博文数独解法小探,里面用了五种方法:回溯法,排列组合法,精确覆盖问题法,模拟退火法以及约束编程法,看着看着就发呆了==。在这个页面上一脸懵逼了好久,后来发现题目看错了,就跑去想怎么解决题目,就没有继续看解数独了,现在还是懵逼中...
要生成数独矩阵的话,其实一开始也是想到,可以用解数独的方法来生成数独,一个个判断过去,不行就回溯。因为前面写过解数独的回溯,所以生成数独的回溯算法就很好理解了。
查找资料的过程中,看到了《编程之美》中有关于数独的生成方法,普通的方法也是采用回溯,还有一种方法是用置换矩阵的方法。

1227382-20170910121507991-2050309086.png
放出图片是想说明,采用置换的方法,思想真的超级简单,随便在博客上记录下这种思想....但考虑到作业中与学号要关联,想到用回溯比较简单,就采用回溯了...

设计实现

程序比较简单,就只有两个函数,一个check函数是否符合数独的约束条件,一个checkInput函数检查运行参数的合法性。至于生成数独直接在主函数中采用两个while循环输出了,如果用递归的话,可能会消耗非常多的内存。

代码说明

核心代码就是两个while循环,主要是回溯法的思想
1227382-20170910173439038-1965401396.png
当发现不能符合约束条件时,设置

sudoku[i][j] = 0;  
--k;  //这个步骤非常重要,因为少了它就不可能回溯成功。在要求生成给定数量矩阵的解决办法也是根据这个,如果都可以符合要求,我假设这个不能符合,回退一步,就可以生成多个。

测试运行

对于使用参数运行的设置
1227382-20170910174102616-1288709943.png

性能分析

测试时我采用直接在exe中输出,得到的分析图:
1227382-20170910191035522-1979433887.png

由于生成数独文件直接在main中输出了,这是main函数的分析图
1227382-20170910190719835-247230639.png
在生成多个数独矩阵时,程序输出占了主要。

PSP表格 (感觉写程序时好像没有注意这边,现在回想可能比实际误差非常大)

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划
· Estimate· 估计这个任务需要多少时间20小时
Development开发--
· Analysis· 需求分析 (包括学习新技术)6小时8小时
· Design Spec· 生成设计文档2小时-
· Design Review· 设计复审 (和同事审核设计文档)--
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)10分钟-
· Design· 具体设计2小时3小时
· Coding· 具体编码3小时4小时
· Code Review· 代码复审20分钟30分钟
· Test· 测试(自我测试,修改代码,提交修改)1小时2小时
Reporting报告1小时2小时
· Test Report· 测试报告--
· Size Measurement· 计算工作量--
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划10分钟20分钟
合计15小时40分钟20小时

思考与总结

这次的作业,做的比较匆忙。最大的收获是对回溯法的使用。还有对git的使用更加熟练了,而且开始学会使用gitignore了,同时也学到了怎么输入参数测试exe以及vs的使用和性能分析。一开始自己想着如何实现,后来代码写得一直有问题,也找不出来错误。好在看了网上的一些博客顺利解决了。其实实现起来,没有想象的那么复杂。遇到问题不要害怕,应该多学会Google解决。

转载于:https://www.cnblogs.com/hish/p/7500682.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值