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

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


 

posted @ 2017-09-26 01:55  wengchenhua  阅读(133)  评论(2编辑  收藏  举报