• 2020软件工程作业03


    软件工程 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1
    作业要求 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494
    作业目标 PSP表格、描述解题思路、设计实现过程、改进程序性能、展示关键代码,收获和感悟
    作业正文 如下文
    参看文献 CSDN,百度,同学建议

    Github项目地址:
    https://github.com/17jkxyq/RG02

    PSP2.1 Personal Software Process Stage 预估耗时(小时) 实际耗时(小时)
    Planning 计划 90 60
    Estimate 估计这个任务需要多少时间 4835 5580
    Development 开发 2500 3000
    Analysis 需求分析(包括学习新技术) 360 300
    Design Spec 生成设计文档 90 75
    Design Review 设计复审(和同事审核设计文档) 25 35
    Coding Standard 代码规范(为目前的开发制定合适的规范) 25 15
    Design 具体设计 180 200
    Coding 具体编码 1200 1500
    Code Review 代码复审 90 60
    Test 测试(自我测试,修改代码,提交修改) 150 200
    Reporting 报告 45 45
    Test Report 测试报告 30 30
    Size Measurement 计算工程量 20 25
    Postmortem & Process Improvement Plan 事后总结提出过程改进计划 30 35
    合计 4835 5580

    思路描述
    一开始看到题目,当时想到的方法就是每一行都随机生成一个1-9的全排列。但是题中最多需要生成的数独终局可能达到1000000,显然从时间角度来看,这种方法不现实。
    于是开始上网查询相关方法。在查询的过程中发现,发现一个数独终局可以由第一行的特定平移序列构成,且交换前三行的任意两行,中间三行的任意两行或最后三行的任意两行,
    都会生成一个新的终局。基本上解开数独题都是通过深度搜索和回溯法来完成的。也因此,定下了最后代码的基调也是以此来完成。

    流程图

    关键代码
    借鉴test_only(int m,int i,int j,int test)函数,采用了余数的方法来的得出当前在的小宫的位置,并加以运算获得该从何处开始何处停止的信息。

    test_only()使用余数这点来指明小宫格的具体位置以及运算出其循环判断时需要的范围

    delete_all(int m)函数,用于一个数独盘完成解答输出后清除数据,为下一个数独做准备。
    void delete_all(int m) //for next loop
    {
    int i,j;
    for(i=1;i<=m;i++)
    for(j=1;j<=m;j++)
    a[i][j]=0;
    }

    性能分析

    单元测试

    改进
    在实现数独第一行的全排列时,采用的是蛮力法,直接使用多个循环实现,大大消耗了时间,因此进行了优化。
    参考了网上的方法建议,考虑到无解也应该报告,于是特地加了 if(flag==0) f<<"Error: No answer!"<<endl;
    如图 无解也会进行了相应的报告

    收获和感悟:
    刚开始并不知道从哪里下手,询问了同学也参考了网上的方法,决定从简单的三宫格入手,但是还是不尽如人意。最后还是通过各种渠道的资料查询
    多方借鉴才勉强做完,这里也是看出来自己的只适合技术储备存在较大缺口,需要着实进行提升和改进,在编程语言的选择上,之前一直都是偏向java,
    但这次选择了C,也是想尝试不同的语言,来进行多方面的提升,个人还是会偏向java一些。但是无论是什么样的编程语言,编程能力始终是最大的考验。
    通过这几次的作业,我发现自己在编程和软件使用上面越来越薄弱了,也是希望借着这样的作业更好地提升自己的能力吧。

    评价

  • 相关阅读:
    字符串匹配常见算法(BF,RK,KMP,BM,Sunday)
    JSP基本语法总结【1】(jsp工作原理,脚本元素,指令元素,动作元素)
    JUnit【1】断言用法之assertEquals/True/False/ArrayEquals
    软件测试基础配置
    前端入门20-JavaScript进阶之异步回调的执行时机
    前端入门19-JavaScript进阶之闭包
    前端入门18-JavaScript进阶之作用域链
    前端入门17-JavaScript进阶之作用域
    前端入门16-JavaScript进阶之EC和VO
    前端入门15-JavaScript进阶之原型链
  • 原文地址:https://www.cnblogs.com/xieyuqi/p/12594252.html
Copyright © 2020-2023  润新知