• 软工实践第二次作业


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

    解体思路

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


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

    设计实现

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

    代码说明

    核心代码就是两个while循环,主要是回溯法的思想

    当发现不能符合约束条件时,设置

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

    测试运行

    对于使用参数运行的设置

    性能分析

    测试时我采用直接在exe中输出,得到的分析图:

    由于生成数独文件直接在main中输出了,这是main函数的分析图

    在生成多个数独矩阵时,程序输出占了主要。

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

    PSP2.1 Personal 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解决。

    我相信 坚持的力量
  • 相关阅读:
    管道和FIFO
    2.Qt Creator的使用
    1.新手上路:Windows下,配置Qt环境
    系统数据文件和信息
    使用Python与数据库交互
    与文件和目录操作相关的函数
    使用Python处理Excel文件的一些代码示例
    使用Python处理CSV文件的一些代码示例
    【Jenkins】发布报错“error: RPC failed; curl 18 transfer closed with outstanding read data remaining”
    Linux之文本处理命令
  • 原文地址:https://www.cnblogs.com/hish/p/7500682.html
Copyright © 2020-2023  润新知