数据结构课程设计迷宫问题文档格式.docx
《数据结构课程设计迷宫问题文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计迷宫问题文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计迷宫问题文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/12/ed44fb29-710e-4ee1-a5e6-525df608051c/ed44fb29-710e-4ee1-a5e6-525df608051c1.gif)
日期:
系主任签名:
日期:
长沙学院课程设计鉴定表
贺承誉
2010022634
专业
班级
软件六班
设计题目
魏歌
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
答辩小组长签名:
日期:
教研室意见:
系(部)意见:
日期:
说明
课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
摘要
计算机系的课程设计,我设计了一个迷宫系统,利用了栈结构来保存所走的迷宫路径,可以实现寻找迷宫通路的功能,当无法找到出口时,可提示用户不存在路径。
迷宫的地图可由手动输入,包括迷宫的行数与列数、迷宫的具体布局。
关键词:
课程设计;
迷宫;
数据结构。
目录
1.设计内容与要求1
2.设计说明2
2.1界面设计2
2.2数据结构3
3.实现与测试4
3.1结果4
3.2测试过程5
总结7
参考文献8
附录A源代码9
1.设计内容与要求
设计要求:
2.设计说明
2.1界面设计
迷宫系统欢迎界面如图2.1所示。
由三个菜单组成,为创建地图、打印路径与退出。
图2.1迷宫系统欢迎界面
迷宫界面如图2.2所示。
先按1创建地图,再输入迷宫行与列,再输入迷宫布局,出现图2.2的内容。
图2.2迷宫游戏界面
路径界面如图2.3所示。
创建好地图之后,按2就可以打印路径。
图2.3路径界面
2.2数据结构
数据结构图如图2.4所示。
主函数调用迷宫函数,迷宫函数调用输出路径函数,从而实现功能。
图2.4数据结构图
3.实现与测试
优良。
整个测试包含如下内容:
a.综合评估:
整个软件开发难度还算较简单,过程虽然繁琐,容易出错,但总的结果还算可以。
整体上较好,样式简单,美观。
b.软件开发中计划的执行情况:
测试页面的连接情况及是否出现异常状况。
测试结果状况良好,无出现不良情况。
c.软件质量目标完成情况:
完成情况良好,质量品质
3.1结果
输入一些临界数据进行测试:
当输入的迷宫为4*4的
1111
时,输出结果为“不存在路径”。
如下图3.1:
图3.1
0000
0000
时,输出结果如下图3.2
图3.2
3.2测试过程
页面测试报告如表3.1:
表3.1页面测试报告
编号:
001
名称:
页面测试
前置测试用例
无
完成人:
测试对象:
检查是否正常显示,检查信息是否正确、完整
优先级:
高
测试人:
软件六班贺承誉
修改人:
测试步骤:
1.打开程序
2.输入选择功能
预期结果:
1.显示正常
2.信息显示正确、完整
测试结果:
成功
错误列表
序列
输入参数
错误结果
1.
迷宫结果测试报告如表3.2:
表3.2迷宫输出报告
检查输出结果是否符合要求,显示是否正确、完整
软件E班尹京伟
1.输入迷宫
2.输出路径
1.页面刷新后显示出路径坐标
2.显示的商品信息正确、完整
总结
综合评估:
整个软件开发难度还算较简单,过程虽然繁琐,容易出错,但总的结果还算可以。
软件开发中计划的执行情况
软件质量目标完成情况:
完成情况良好,质量品质优良。
总结开发活动中的检验与教训
在本次课程设计中,我学会了许多的东西,开始的时候,我犯了许多的错误,通过同学和老师的帮助,一个个突破,才有这次的课程设计。
所以。
做啥事都得认真对待,这样才能提升自己。
参考文献
[1]王挺.数据结构[M].北京:
清华大学出版社,2005.
[2]吴伟民.数据结构[M].北京:
清华大学出版社,2006.
附录A源代码
#include<
iostream>
usingnamespacestd;
structD
{
intx;
//x代表当前位置的行坐标
inty;
//y代表当前位置的列坐标
intdir;
};
structLink
Ddata;
Link*next;
//Stack
classStack
private:
Link*top;
//指向栈顶节点的指针
public:
Stack();
~Stack();
voidPush(constD&
e);
//把元素data压入栈中
DPop();
//使栈顶元素出栈
DGetTop();
//取出栈顶元素
boolEmpty();
//判断栈是否为空,是空的话返回true
Stack:
:
Stack()//构造函数,置空栈
top=NULL;
}
~Stack(){}//析构函数
voidStack:
Push(constD&
e)//把元素x压入栈中
Link*P=newLink;
P->
data=e;
next=top;
top=P;
DStack:
Pop()//使栈顶元素出栈
{
Link*P=top;
top=top->
next;
DTemp=P->
data;
deleteP;
returnTemp;
GetTop(){returntop->
}//取出栈顶元素
boolStack:
Empty(){return(top==NULL);
intmove[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};
//定义当前位置移动的8个方向
boolFindPath(int**maze,constint&
m,constint&
n);
//寻找路径
voidPrint(Stack&
p,int**maze,constint&
//输出迷宫的路径
int**CreateMaze(int&
m,int&
n);
//创建迷宫
//返回存取迷宫的二维指针
intmain()
intm=0,n=0;
//定义迷宫的长和宽
int**maze;
//定义二维指针存取迷宫
intchoice=1,create=0;
while(choice)
{
cout<
<
"
*******************迷宫系统*************************"
endl;
请选择"
创建迷宫地图--------------------------------------①"
打印路径--------------------------------------②"
退出--------------------------------------○"
****************************************************"
cin>
>
choice;
switch(choice)
{
case1:
maze=CreateMaze(m,n);
//调用GetMaze(int&
n)函数,得到迷宫
create=1;
break;
case2:
if(0==create)
{
cout<
未创建迷宫地图,请先创建地图!
!
maze=CreateMaze(m,n);
}
if(FindPath(maze,m,n))//调用Mazepath(int**maze,intm,intn)函数获取路径
cout<
迷宫路径探索成功!
\n"
;
else
路径不存在!
case0:
default:
cout<
输入有误,请重新输入"
break;
}
}
return0;
n)//返回存取迷宫的二维指针
inti=0,j=0,a,b;
请输入迷宫的长和宽:
cin>
a>
b;
//输入迷宫的长和宽
if(a<
=1||b<
=1)
设置有误,默认设为2X2大小的"
a=2;
b=2;
}
请输入迷宫内容:
(0代表可通,1代表不可通)\n"
m=a;
n=b;
//m,n分别代表迷宫的行数和列数
maze=newint*[m+2];
for(i=0;
i<
m+2;
++i)
maze[i]=newint[n+2];
for(i=1;
=m;
for(j=1;
j<
=n;
++j)
maze[i][j];
for(i=0;
++i)
maze[i][0]=maze[i][n+1]=1;
n+2;
maze[0][i]=maze[m+1][i]=1;
//设置边界
returnmaze;
//返回存贮迷宫的二维指针maze
n)//寻找迷宫maze中从(0,0)到(m,n)的路径
//到则返回true,否则返回false
StackSpath,Sproc;
//定义栈Sproc、Spath,分别存探索迷宫的过程和存储路径
DTemp1,Temp2;
intx,y,loop;
Temp1.x=1;
Temp1.y=1;
Sproc.Push(Temp1);
//将入口位置入栈
Spath.Push(Temp1);
maze[1][1]=2;
//标志入口位置已到达过
while(!
Sproc.Empty())//栈Sproc非空,则反复探索
Temp2=Sproc.GetTop();
//获取栈顶元素
if(!
(Sproc.GetTop().x==Spath.GetTop().x&
&
Sproc.GetTop().y==Spath.GetTop().y))
Spath.Push(Temp2);
//如果有新位置入栈,则把上一个探索的位置存入栈Spath
for(loop=0;
loop<
8;
++loop)//探索当前位置的8个相邻位置
x=Temp2.x+move[loop][0];
//计算出新位置x位置值
y=Temp2.y+move[loop][1];
//计算出新位置y位置值
if(maze[x][y]==0)//判断新位置是否可达
{
Temp1.x=x;
Temp1.y=y;
maze[x][y]=2;
//标志新位置已到达过
Sproc.Push(Temp1);
//新位置入栈
}
if((x==(m))&
(y==(n)))//成功到达出口
Temp1.x=m;
Temp1.y=n;
Temp1.dir=0;
Spath.Push(Temp1);
//把最后一个位置入栈
Print(Spath,maze,m,n);
//输出路径
returntrue;
//表示成功找到路径
}//for
//如果没有新位置入栈,则返回到上一个位置
if(Sproc.GetTop().x==Spath.GetTop().x&
Sproc.GetTop().y==Spath.GetTop().y)
Sproc.Pop();
Spath.Pop();
}//while
returnfalse;
//表示查找失败,即迷宫无路经
n)//输出路径
Stacktemp=p;
temp.Empty())
data=temp.Pop();
maze[data.x][data.y]=8;
inti,j;
for(j=1;
if(maze[i][j]==8)
'
*'
else
cout<
'
if(j==n)