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.1 | Personal 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.自评