zoukankan      html  css  js  c++  java
  • 第二次作业——个人项目实战

    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功能不熟悉,比如性能分析这些功能模块第一次接触,学到许多。


  • 相关阅读:
    Hello World基于.net framework中CLR的执行
    MVN常用命令
    Git常用命令
    Markdown常用语法
    计算机专用英语词汇
    Windows DiskPart
    字符集过滤器
    SSHkey
    书名
    redis
  • 原文地址:https://www.cnblogs.com/wengchenhua/p/7594714.html
Copyright © 2011-2022 走看看