Github 地址: https://github.com/wln772777917/-------
PSP 表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 5 | 10 |
· Estimate | · 估计这个任务需要多少时间 | 5 | 10 |
Development | 开发 |
|
|
· Analysis | · 需求分析 (包括学习新技术) | 120 | 1000 |
· Design Spec | · 生成设计文档 | 30 | 60 |
· Design Review | · 设计复审 (和同事审核设计文档) | 0 | 0 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 30 |
· Design | · 具体设计 | 60 | 120 |
· Coding | · 具体编码 | 180 | 300 |
· Code Review | · 代码复审 | 0 | 0 |
· Test | · 测试(自我测试,修改代码,提交修改) | 120 | 1000 |
Reporting | 报告 | 60 | 120 |
· Test Report | · 测试报告 | 30 | 30 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 120 |
| 合计 | 660 | 2810 |
核心代码:
用回溯方法求解数独
求解数独: 直接按照此方法每个残局生成一个终局.
生成终局; 相当于只有左上角一个数的残局.
void backtrace(int count,int max) //count 表示回溯层数 max 表示输出终局个数
- {
- if(num>=max)//num 表示已输出终局个数
- return;
- else if(count==81&&num<max)
- {
- for(int i = 0; i < 9; ++i)
- for(int j = 0; j < 9; ++j)
- {
- if(j==8)
- fprintf(fp1,"%d\n",map[i][j]);
- else
- fprintf(fp1,"%d",map[i][j]);
- }
- fprintf(fp1,"\n");
- num++;
- return;
- }
- int row = count / 9;
- int col = count % 9;
- if(map[row][col] == 0)
- {
- for(int i = 1; i <= 9; ++i)
- {
- map[row][col] = i;// 赋值
- if(isPlace(count))// 可以放
- backtrace(count+1,max);// 进入下一层
- }
- map[row][col] = 0;// 回溯
- }
- else
- backtrace(count+1,max);
- }
解题思路:
由于一开始接触过回溯, 就考虑了一下回溯算法, 发现应该可行, 不过时间复杂度可能会很高. 通过 81 个位置挨个放数来实现数独的求解. 由于文件输入和输出在以前学习 C 语言的时候没有掌握, 一头雾水, 于是选择了直接输出, 发现时间并没有超过要求. 后来通过稳同学学会了怎么用命令行. 然后通过阅读 C 程序设计 (第四版) 第 10 章对文件的输入和输出基本掌握了文件的操作.
来源: http://www.bubuko.com/infodetail-2567975.html