• 第二次作业——个人项目实战


    Github项目地址:

      https://github.com/wengCH/sudoku


    解题思路:

    • 数独对我来说不是很陌生,主要采用递归的方法,实现对每个位置填充数进行判断。
    • 以人的思想可以对每个位置可填充进行筛选后再进行判断,如12(第一排第2列)处和13处有且仅能填写数字1和2,则在当前3*3,以及第1排其他处不能填写1和2,在利用类似方法递归进行全局可填数字删减,实现减少递归次数,不过我发现,减少可填数字删减的递归似乎更加麻烦。
    • 采用随机打乱1-9数字进行递归,实现随机生成数独。

    设计实现:

    • 首行随机打乱1-9数字,根据附加要求对生成的首个数字进行判断是否符合要求,不符合则重新打乱;
    • 从第二行开始,随机打乱1-9数字对当前位置进行填充尝试,成功则递归进行下一位进行填充尝试,该行全部成功则正式填充进行下一行,否则擦除递归中填充项进行重新尝试。
    • 当前位填充成功判断:所在3*3位置以及所在纵列横排不存在重复项则为成功。

    流程图:


    主要代码:

    bool put(int line, int index) {
        if (index > 8)
            return true;
        if (table[line][index] != 0) {
            return put(line, index + 1);
        }
        int num[] = { 1,2,3,4,5,6,7,8,9 };
        shuffle(num, 9, 1);
        for (int i = 0; i < 9; i++) {
            if (test(line, index, num[i]) == true) {
                table[line][index] = num[i];
                if (put(line, index + 1) == true) {
                    return true;
                }
            }
        }
        table[line][index] = 0;
        return false;
    }

    测试运行:


    性能分析:


    PSP:

    PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
    Planning 计划 80 80
    Estimate 估计任务时间 20 20
    Development 开发 300 360
    Analysis 需求分析 60 120
    Design 生成设计文档 60 -
    Design Review 设计复审 60 -
    Coding Standard 代码规范 30 30
    Design 具体设计 120 150
    Coding 具体编码 240 300
    Code Review 代码复审 60 30
    Test 测试 60 60
    Reporting 报告 100 120
    Test Repor 测试报告 30 20
    Size Measurement 计算工作量 30 -
    Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 30
    合计   1280 1320

    总结:

    很不错的一次编程实践,编程内容贴近生活(我玩过的小游戏),期间安装VS花了一些时间,较少使用VS功能不熟悉,比如性能分析这些功能模块第一次接触,学到许多。


  • 相关阅读:
    壳的编写(1)-- 简介与搭建框架
    Writing Your Own Packer
    中断门
    记一次:Windows的Socket编程学习和分析过程
    封装调用包含界面的MFC dll
    编译vtk8.1.1 + 在vs2017中配置开发环境
    迁移通知
    基于CAN总线的汽车诊断协议UDS(上位机开发驱动篇)
    基于CAN总线的汽车诊断协议UDS(ECU底层模块移植开发)
    浅谈jQuery,老司机带你jQuery入门到精通
  • 原文地址:https://www.cnblogs.com/wengchenhua/p/7594714.html
Copyright © 2020-2023  润新知