• 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.评分

  • 相关阅读:
    MVC,MVP和MVVM的区别
    将数组里某个属性相同的对象合并成一个数组
    Ajax的理解
    VUE如何关闭Eslint的方法
    数组去重
    vue-router传递参数的几种方式
    密码的显示和隐藏
    "校园易借查询"选题报告
    我的第一个微信好友分析
    数据库实践
  • 原文地址:https://www.cnblogs.com/liangming/p/12586388.html
Copyright © 2020-2023  润新知