课程设计走迷宫Word文档下载推荐.docx
- 文档编号:19375755
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:22
- 大小:80.39KB
课程设计走迷宫Word文档下载推荐.docx
《课程设计走迷宫Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《课程设计走迷宫Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
{
intr,c;
/*迷宫中位置的坐标*/
}PosType;
intm,n;
chararr[RANGE][RANGE];
/*用二维数组表示迷宫*/
}MazeType;
第二,确定放入栈中的元素的存储结构,表明通道块在路径上的“序号”,通道块的坐标位置以及下一步要走的方向。
typedefintdirectiveType;
intstep;
PosTypeseat;
/*当前位置在迷宫中的坐标*/
directiveTypedi;
/*从当前位置走到下一位置的方向*/
}ElemType;
第三,确定栈的存储结构。
typedefstructNodeType
ElemTypedata;
structNodeType*next;
}NodeType,*LinkType;
LinkTypetop;
/*链栈的顶点定义*/
intsize;
}Stack;
voidInitStack(Stack&
S)/*构建一个空栈*/
{
S.top=NULL;
S.size=0;
}
StatusMakeNode(LinkType&
p,ElemTypee)
p=(NodeType*)malloc(sizeof(NodeType));
if(!
p)returnFALSE;
/*存储分配失败*/
p->
data=e;
next=NULL;
returnTRUE;
}
定义在什么情况下要入栈
StatusPush(Stack&
S,ElemTypee)
LinkTypep;
if(MakeNode(p,e))
{
next=S.top;
S.top=p;
S.size++;
}
returnFALSE;
判断栈是否为空
StatusStackEmpty(StackS)/*若栈为空栈,则返回TRUE,否则返回FALSE*/
if(S.top==NULL)
定义在什么情况下要出栈
StatusPop(Stack&
S,ElemType&
e)
if(StackEmpty(S))
else
p=S.top;
S.top=S.top->
next;
e=p->
data;
S.size--;
free(p);
定义什么情况下迷宫可以走
Statuspass(MazeTypemaze,PosTypecurpos)
m=curpos.r;
n=curpos.c;
if(maze.arr[m][n]=='
'
)
定义什么情况下已经走出了迷宫
StatusSame(PosTypecurpos,PosTypeend)
if(curpos.r==end.r&
&
curpos.c==end.c)
定义走通的位置要用*标记
voidFootPrint(MazeType&
maze,PosTypecurpos)
maze.arr[m][n]='
*'
;
定义在探索过程中老鼠走的方向关系
PosTypeNextPos(PosTypecurpos,intdi)
switch(di)
{
case1:
curpos.c++;
break;
case2:
curpos.r++;
case3:
curpos.c--;
case4:
curpos.r--;
returncurpos;
定义走过但没有走通位置要用@标记
voidMarkPrint(MazeType&
maze,PosTypep)
maze.arr[p.r][p.c]='
@'
voidPrintMaze(MazeTypema)
inti,j;
printf("
\n"
);
for(i=0;
i<
ma.m;
i++)
\t"
for(j=0;
j<
ma.n;
j++)
%c"
ma.arr[i][j]);
将数组转化为迷宫
voidInitMaze(MazeType&
maze,inta[M][N],introw,intcol)
maze.m=row;
maze.n=col;
row;
col;
if(a[i][j]==0)
maze.arr[i][j]='
#'
探索迷宫
StatusMazePath(MazeType&
maze,PosTypestart,PosTypeend)
Stacks;
intcurstep=1;
//探索第一步
Statusfound=FALSE;
ElemTypee;
PosTypecurpos=start;
//设定当前位置为入口
InitStack(s);
do{
if(pass(maze,curpos))//当前位置可以通过,即是未曾走过的通道块
FootPrint(maze,curpos);
//留下足迹
e.step=curstep;
e.seat=curpos;
e.di=1;
Push(s,e);
//加入路径
if(Same(curpos,end))//到达终点
found=TRUE;
}
curpos=NextPos(curpos,1);
//下一位置是当前位置的北邻
curstep++;
//探索下一步
else//当前位置不能通过
StackEmpty(s))
Pop(s,e);
while((e.di==4)&
!
StackEmpty(s))
MarkPrint(maze,e.seat);
//留下不能通过的标记,并退回一步
curstep--;
if(e.di<
4)
e.di++;
//探索下一方向
curpos=NextPos(e.seat,e.di);
//设定当前位置是该新方向上的相邻块
}while(!
StackEmpty(s)&
found);
returnfound;
voidPrint(intmaze[][N])
表示迷宫的数组\n"
M;
i++)
N;
j++)
%d"
maze[i][j]);
3.程序的实现
标记入口位置(说明此位置已试探),把入口压入栈中
栈非空
取栈顶元素
初始试探方向
存在试探方向
确定试探位置的坐标
试探位置是否为迷宫出口
打印路径上每个位置
是否为通道
标记该位置
换个方向试探
返回
该位置及方向进栈
前进到下一位置
C++
方向向东
r++
方向向南
C--
方向向西
r--
方向向北
c--
位置
(c,r)
c++
4.主函数设计
voidmain()
intmaze[M][N]={输出迷宫数组
1,1,1,1,1,1,1,1,1,1,1,
1,0,1,0,0,1,1,1,0,0,1,
1,0,0,0,0,0,1,0,0,1,1,
1,0,1,1,1,0,0,0,1,1,1,
1,0,0,0,1,0,1,1,0,1,1,
1,1,0,0,1,0,1,1,0,0,1,
1,1,1,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1};
MazeTypeL;
PosTypestart,end;
Print(maze);
InitMaze(L,maze,M,N);
start.r=2;
定义迷宫入口和出口
start.c=4;
end.r=6;
end.c=9;
由数组转化出的迷宫"
PrintMaze(L);
if(MazePath(L,start,end))
迷宫的路径,用*表示"
此迷宫没有通路!
"
5.测试
第一次测试
start.r=2;
第二个测试
start.r=1;
start.c=1;
end.c=9
6.心得体会
数据结构是在整个计算机科学与技术领域上广泛被使用的术语。
它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。
数据结构有逻辑上的数据结构和物理上的数据结构之分。
逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。
数据结构是数据存在的形式。
数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。
数据结构课程的主要目的是介绍一些常用的数据结构,阐明数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种数据结构,讨论对它们实行的各种运算的实现算法。
通过这次数据结构课程设计,让我学到了好多东西。
在实际操作过程中犯了一些错误却让我有了意外的收获,所学数据结构理论知识得到了巩固。
通过实际操作,学会数据结构程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。
现在终于挨到了写收获与体会的时候了,的确令人兴奋,看看自己的劳动成果,好开心。
一个星期前的现在,当听到老师布置给我们的题目时,我们都蒙了,这么难的题目我们怎么会啊,但我们只能尽我们自己最大的努力把程序给写出来,虽然知道这一路肯定是异常的艰苦,但豁出去了。
上网查资料、去图书馆查,查相关的函数,经过两三天的努力,我把框架弄出来了,可是还有计算难题摆在我的面前,真的是个难题,自从把框架弄好了以后就没有进展了,眼看一个星期快过去了,我那个急啊,可是急也没有用。
我坚持,终于工夫不负有心人,我参照类似程序,改改和添添,终于大功告成,我们欢呼我们雀跃,终于相信我们自己是足够的伟大。
7.附件
#include<
stdio.h>
stdlib.h>
string.h>
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
#defineRANGE20
#defineM8
#defineN11
S)
StatusStackEmpty(StackS)
maze,inta[][N],introw,intcol)
if(pass(maze,curpos))
if(Same(curpos,end))
else
intmaze[M][N]={
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 迷宫
![提示](https://static.bdocx.com/images/bang_tan.gif)