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

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表中的步骤进行解题。
原文地址:https://www.cnblogs.com/ZHOULR/p/7517302.html