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


  • 相关阅读:
    How to provide highlighting with Spring data elasticsearch
    Android——仿QQ聊天撒花特效
    Android 仿新版QQ的tab下面拖拽标记为已读的效果
    GitHub控件之BadgeView(数字提醒)
    Android之基于百度云推送IM
    Android消息推送完美解决方案全析
    android asmack 注册 登陆 聊天 多人聊天室 文件传输
    android:TextAppearance.Material.Widget.Button.Inverse问题
    Android 高仿微信实时聊天 基于百度云推送
    Gradle DSL method not found: 'android()
  • 原文地址:https://www.cnblogs.com/wengchenhua/p/7594714.html
Copyright © 2011-2022 走看看