• 软件工程实践2019第三次作业


    项目地址:https://github.com/alvin0000/031702114

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

    解题思路

    首先在看到题目后,一般这种时常作为智力题的问题,它是肯定有一些不变的通性,在没有使用代码编程而仅由个人习惯、个人经验解题时常无意中使用了其中的通性。
    在之前有做过这类型的数独题目,比如 HDU 1462 ,这种题规模不大,在有固定时间限制时也能很快运行完,而且在这次的运行时间并未严格限制,所以能用的方法有很多。
    首先我想到的就是爆搜,这种方法常因时间限制被舍弃,或增加剪枝和启发式辅助,但在题目规模不大时,就很能看出它的好处,它思路简单,容易掌握,就算有bug也能很快的进行修改,在比赛时是很好的方法。
    首先把数据存入数组,再加上对行、列、宫的标志数组,从头开始不断搜索和回溯,可以遍历到所有情况,当出现多解得情况只需保留搜索到的解,就能将所有的解找到。
    独到之处:该方法对于小项目的时间耗费差距不大,但它能遍历所有的情况,解决多解问题,在极端情况下甚至在没有填数的地图中遍历出该游戏的所有情况。

    设计实现

    代码中总共用了一个类,五个函数,五个函数分别负责类的初始化、查找数字所属的宫、记录数据、遍历、输出结果,在记录数据与遍历时会用到查找数字所属的宫的函数

    代码说明


    声明类、和类里面所需要用到的变量


    定义类的构造函数,初始化地图里的数据,和各数字使用情况

    在各个阶级的宫的划分情况不同,需要计算不同阶级某一数字所属的宫


    记录各行、列、宫的数字使用情况,方便后面遍历时选取数字


    爆搜,搜索在当前数字填写情况下的所有情况,在错误的情况下回溯,在有解的情况下此算法必定能找到解


    将数据输出到output.txt文件


    主函数,从文件input.txt输入数据,并调用函数完成求解过程

    心得体会

    总体来说,这次的作业并不难,但还是很少用这种模式化的思考方式。之前解决问题的时候,所有的想法都在脑子里,并不会表现在文字上,但按照这种流程去完成一项任务,就感觉做的行云流水。
    在构建之法的阅读中,也有很多值得注意甚至有意思的观点。比如思想误区的过早优化思想,把事情做在前面是我的习惯,虽说时间不够用时就无可奈何,但也会因为过早优化浪费很多的时间,

  • 相关阅读:
    “==”和equals方法的区别
    一个睡五分钟等于六个钟头的方法
    依赖、关联、聚合、组合
    关于AOP /IOC / DI
    Java中equals方法比较的是什么?
    JAVA 程序题
    jQuery EasyUI 笔记 DataGrid
    C#利用QrCode.Net生成二维码(Qr码)
    由【酷狗音乐】所联想到的C/S界面设计
    VS2010中CodeSnippet【代码段】应用与创建
  • 原文地址:https://www.cnblogs.com/alvin-mx/p/11575211.html
Copyright © 2020-2023  润新知