Github项目地址:
解题思路:
- 刚开始看到题目没有太多思路,试着做了几道简单的数独题目之后,也上网了搜索类似的解题思路,想到用递归的方法暴力求解,用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表中的步骤进行解题。