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 说实话自己会用一点,但还是不会分析,对编码过程中的异常处理,自己也爱莫能助,现阶段自己水平不够,以后多学习进步吧

8.评分

posted @ 2020-03-29 09:43  梁大明  阅读(229)  评论(0编辑  收藏  举报