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


    Github项目地址:

    https://github.com/ARLENDAN/sudoku

    解题思路:

    • 刚开始看到题目没有太多思路,试着做了几道简单的数独题目之后,也上网了搜索类似的解题思路,想到用递归的方法暴力求解,用c和c++写出相应代码,之后遇到的一些问题,着手修改bug,问问同学查找资料,慢慢调试,勉强做出了题目。

    设计实现:

    • 首先判断第i行、第j列的数是否能设为k,如果是则设为k,并创建求解的函数,求出第n个数的行数和列数,同时进行递归判断直到满足要求,如果到第80个格子则输出可行解,不是则接着进行判断,求出下一个格子的数,直到结束。

    主要代码:

    void Shudu(int a[9][9],int n)
    {
    	if(Num==result) return;
     int t[9][9];
     int i,j;
     for(i=0;i<9;i++)
     {
      for(j=0;j<9;j++)
       t[i][j]=a[i][j];
     }
     i=n/9; j=n%9; 
     if(a[i][j] != 0) 
     {
      if(n == 80)  
       {result++;print(t);}
       
      else    
       Shudu(t,n+1);
     }
     else   
     {
      for(int k=1;k<=9;k++)
      {
       bool flag=check(t,i,j,k);
       if(flag) 
       {
        t[i][j]=k; 
        if(n == 80)
          {result++;print(t);}
        else
         Shudu(t,n+1);
        t[i][j]=0; 
       }
      }
     }
    }
    
    
    

    测试运行:

    性能分析:

    测试数据100

    各个模块上预计和实际花费的时间:

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

    反思:

    • 做的过程整道题的思路如果不看网上的资料,很难自己得出解法,想到要用递归的方法实现但是具体的步骤并不能够很清晰的得出,希望通过之后花更多时间的学习来巩固之前遗忘的知识,和尝试用其他更好的方法解决题目。过程中也并没有严格按照PSP表中的步骤进行解题。
  • 相关阅读:
    教你轻松搞定javascript中的正则
    带你学习javascript的函数进阶(二)
    带你学习Javascript中的函数进阶(一)
    带你学习ES5中新增的方法
    作为前端,你需要懂得javascript实现继承的方法
    作为前端,你需要了解的js构造函数和原型
    ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能
    企业级zabbix监控搭建及邮件报警
    -bash: netstat: 未找到命令
    shell点名脚本不重复人名
  • 原文地址:https://www.cnblogs.com/ZHOULR/p/7517302.html
Copyright © 2020-2023  润新知