zoukankan      html  css  js  c++  java
  • 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.评分

  • 相关阅读:
    Ubuntu下ATI显卡风扇转速调节脚本
    App_GlobalResources和LocalResources文件夹区别
    ubuntu下添加开机启动项
    UBUNTU安装PHP
    ubuntu apache2配置
    在ubuntu 上安装半透明玻璃窗口
    ASP.NET 页面:在此页面动态调用用户控件(.ASCX)
    Ubuntu 安装 LAMP 主机之后运行出现乱码
    Ubuntu下安装LMAP—菜鸟版
    Ubuntu 10.04风扇声音太大
  • 原文地址:https://www.cnblogs.com/liangming/p/12586388.html
Copyright © 2011-2022 走看看