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
    这个作业的目标 sudu
    作业正文 见下文
    其他参考文献 baidu

    1.Github项目地址

    https://github.com/zzzsunle/test1/blob/master/源.cpp

    2.PSP表格

    PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
    Planning 计划                30                 60
    Estimate 估计这个任务需要多少时间  1200  1600
    Development 开发 100  300
    Analysis 需求分析 (包括学习新技术)  60  80
    Design Spec 生成设计文档  60  90
    Design Review 设计复审  30  50
    Coding Standard 代码规范 (为目前的开发制定合适的规范)  70  90
    Design 具体设计  30  50
    Coding 具体编码  300  455
    Code Review 代码复审  200  360
    Test 测试(自我测试,修改代码,提交修改)  60  75
    Reporting 报告  60  60
    Test Repor 测试报告  60  90
    Size Measurement 计算工作量  15  15
    Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30  30
    合计    1075  1745

    3.思路

    拿到题目的时候楞了一下,觉得这个题目对自己的能力来说无疑是困难的,先去玩了几把数独,找到玩数独的技巧,然后让自己用代码写出来又是另外一种难事,哇 好难啊先去网上找找解题思路,先通过迭代推算出部分数字,然后通过DFS搜索解空间,迭代时排除了一部分不可能解以加速遍历。

    4.关键代码

    *从文件读取sudo矩阵,并且初始化possibility矩阵*/
    void EnterAndInitial()

    /*在sudo数组中,各行各列各九宫格中,根据possibility矩阵寻找可以唯一确定的空白格*/
    void GetUniquity()

    /*用于维护possibility矩阵*/
    void DiminishPossibility()

    /*根据possibility矩阵,重新填充sodu矩阵,并且判断本次迭代是否有新的产出及是否求解完毕*/
    int NextState()

    /*迭代,并且判断迭代是否可以完成求解*/
    bool IsCalculatable()

    /*用于判断某矩阵是否违背sodu规则*/
    bool IsRational()

    /*深度优先搜索,并判断是否存在解*/
    bool DFS(char depth)

    迭代 

    bool IsCalculatable(){

    	int ptr = 0;
    	char rest = 81, lastStepRest = 81;
    	//如果迭代至没有空白块,则本sudo谜题已解决
    	while(rest>0){
    		//z389x56y4,若y不可能为7,x不可能为7,则z=7
    		GetUniquity();
    		//z389x56y4,可知xyz都不可能为3
    		DiminishPossibility();
    		//找到只有一个可能的单元格,填充,计算剩下几个空白块
    		rest = NextState();
    		//如果上一次剩余空白块和本次迭代剩余空白块数量相等,则继续迭代无效,需要搜索解空间
    		if(lastStepRest != rest) lastStepRest = rest;
    		else{
    			//在进行DFS前,先将所有空白块标记进入hash表
    			for(int cnt1=0; cnt1<9; cnt1++) for(int cnt2=0; cnt2<9; cnt2++) if(!sodu[cnt1][cnt2]){hash[ptr][0]=cnt1; hash[ptr++][1]=cnt2;}
    			hash[ptr][0] = -1; hash[ptr][1] = -1;
    			return false;
    		}
    	}
    	return true;
    }
    5.改进程序性能


    6.流程图

    7、总结
    这次代码应该是没有成功,运行出来不太对劲然后用VS测试的时候简直就是一脸懵,它的条条一动不动 我特别羡慕别的同学有那么多红红绿绿的杠杠,我好难啊,它也不报错 就是运行不了,
    还是自己太菜了吧 ,行吧,要好好学习呀,留下了没有知识的泪水。
    8.自评



  • 相关阅读:
    [转]在SQL Server中,关于with as使用介绍
    系统设计笔记【不断更新中】
    关于PHPZend framework2 框架 学习过程。 阅前须知: ZF2中的配置文件是可以静态文件配置来注册和通过相关函数动态注册。 1.EventManager(事件驱动),关于事件驱动,在ZF2相关资料没有详细说明,可以参考ANDROID的事件驱动,MFC的消息响应/事件驱动。
    http://www.mwop.net/blog/248IntroducingtheZF2PluginBroker.html
    Introducing AkrabatSession zf2
    http://127.0.0.1/loginapi/JsonPacket/example/loginrequestdemo.php
    if ($this>getRequest()>isPost()) {
    email
    Quenz_i997_PDA_CHS.rar
    http://team.aiitec.net/?c=inbox
  • 原文地址:https://www.cnblogs.com/lin98/p/12590950.html
Copyright © 2011-2022 走看看