2020软件工程作业03
软件工程 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494 |
作业目标 | 个人编程完成数独 |
作业正文 | 见下文 |
其他参考文献 | 百度,CSDN,博客园 |
Github 项目地址:https://github.com/ming-1225/20177699
PSP 表格:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 15 | 45 |
Estimate | 估计这个任务需要多少时间 | 30 | 60 |
Development | 开发 | 40 | 30 |
Analysis | 需求分析 (包括学习新技术) | 60 | 70 |
Design Spec | 生成设计文档 | 20 | 20 |
Design Review | 设计复审 | 20 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
Design | 具体设计 | 60 | 60 |
Coding | 具体编码 | 120 | 180 |
Code Review | 代码复审 | 120 | 180 |
Test | 测试(自我测试,修改代码,提交修改) | 240 | 360 |
Reporting | 报告 | 30 | 60 |
Test Repor | 测试报告 | 30 | 60 |
Size Measurement | 计算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 60 |
合计 | 865 | 1265 |
1.解题思路
一开始看到这次作业题时,脑中就想起第一次作业中的迷宫问题,感觉这俩个题目在大体上有些相似,那个题目是用DFS方法求解,虽然不是很高大上,但好在实用,于是上网查阅相关资料,采用深搜加回溯的方法来解决问题
深搜加回溯:将数独中空缺的部分记录下来,然后依次判断1-9在各个位置上是否能填入,如果能的话则将其填入,进行下一个空缺位置的填入,如果某一个位置所有数字都不能继续填入,那么将本位置还原,回溯到上一层,将上一层所填入的数字清0,重复上述过程,直到所有位置都填入成功,生成数独的一个解。
2.流程图
3.部分代码说明
数据输入输出
void Input()
{
for (int i = 0; i < s; ++i)
{
for (int j = 0; j < s; ++j)
{
cin >> shudu[i][j];
}
}
}
void Output()
{
for (int i = 0; i < s; ++i)
{
for (int j = 0; j < s; ++j)
{
cout << shudu[i][j];
if (j != s - 1) cout << " ";
}
cout << endl;
}
if (t)
cout << endl;
}
头文件stdafx.h
#include<iostream>
#include<stdlib.h>
#pragma warning(disable:4996)
using namespace std;
#ifndef SUDOKU_H_
#define SUDOKU_H_
/*数独二维数组*/
extern int shudu[9][9], s, t, block, block_line, block_column;
/*声明Check函数,用以检查所填的数是否合法*/
bool Check(int num, int now_line, int now_column);
/*输入函数*/
void Input();
/*工作函数*/
bool Work(int now_line, int now_column);
/*输出函数*/
void Output();
#endif
主函数
int main(int argc, char* argv[])
{
s = atoi(argv[2]);
t = atoi(argv[4]);
freopen(argv[6], "r", stdin);
freopen(argv[8], "w", stdout);
while (t--)
{
Input();
switch (s)
{
case 4:block = 1, block_line = 2, block_column = 2; break;
case 6:block = 1, block_line = 2, block_column = 3; break;
case 8:block = 1, block_line = 4, block_column = 2; break;
case 9:block = 1, block_line = 3, block_column = 3; break;
default:break;
}
if (Work(0, 0)) Output();//如果有解,则调用输出函数
else cout << "No Answer." << endl;//如果无解,则输出“No Answer.”
}
//system("pause");
return 0;
}
4.Code Quality Analysis检测
对于上述警告百度进行修改代码找到问题所在,消掉了一个警告
5.Studio Profiling Tools检测
6.测试
7.心得体会
在这次的作业过程中,我学习到了很多,Visual Studio 项目中,.h文件和.cpp文件的关联,Github建立库和文件的上传,平时写东西都是直接进行输入输出,一开始看到是用命令参数的形式进行输入,有些懵,好在上网百度进行解决,对于代码编写过程中出现的警告,也百度进行修改,Code Quality Analysis工具使用,性能分析工具Studio Profiling Tools 说实话自己会用一点,但还是不会分析,对编码过程中的异常处理,自己也爱莫能助,现阶段自己水平不够,以后多学习进步吧