- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
迷宫求解(有流程图)
一 需求分析
1 以二维数组MazeType表示迷宫,在其周围加一圈围墙;数组中#表示障碍,_表示通路。
2 程序引导用户初始化迷宫,输入其中的障碍;
3 迷宫的入口和出口可以由用户自己设定。
4 若迷宫有通路,则在其走过的路径上以.表示可以通过;
5本程序可以求解多条路径。既在迷宫求解过程中记下所有的走过的位置;
例如:
* * * * * * * * * * * _ _ # # * * _ # # * * _ _ # # * * _ # # # * * _ # # * * _ # * * _ # # # # # * * _ _ _ _ _ _ _ _ * * * * * * * * * * * 二 系统设计
1 设定栈的抽象数据类型定义
基本操作:
int InitStack(SqStack S)
操作结果:构造一个空栈S;
int StackEmpty(SqStack S)
初始条件:栈S已存在。
操作结果:若栈为空则返回TRUE,否则返回FALSE;
GETTOP(S,e)
初始条件:栈S已经存在;
操作结果:若栈不为空,则以e返回栈顶元素。
int Push(SqStack S,SElemType e)
初始条件:栈已经存在。
操作结果:在栈的顶部插入新的栈顶元素;
int Pop(SqStack S,SElemType e)
初始条件:栈已经存在;
操作结果:删除栈顶元素,并以E返回其值。
2 设定迷宫的抽象数据类型为:
基本操作:
1 void CreatMaze(int r,int l)
初始条件:MazeType maze已经存在,其中从第一行到最后一行,每一行的第一个元素和最后一个元素都为*,从第一列的到最后一列,每一列的第一个和最后一个元素的值为*;
操作结果:构成迷宫的int型数组,以#表示障碍,_表示通路。
2 mazepath(posit start,posit end)
初始条件:迷宫已经初始化;
操作结果:若迷宫中存在一条通路,则在程序运行过程中走过的路径赋值为1;并在入口处赋值为-1。若迷宫中不存在通路则打印 NO PATH。
3print()
初始条件:迷宫存在通路;
操作结果;以数字数组的形式输出迷宫。
4 footprint(posit a)
操作结果:使迷宫的M的A点的值变为足迹。
5 nextpos(posit c,int di)
操作结果:调整迷宫行进的方向,寻找出路。
3 本程序包括三个模块
1)主程序模块
int main(){
PosType start,end;
int r,l;
cout请输入迷宫(外围有墙)的行、列数(不大于100):;
cinrl;
CreatMaze(r,l);
cout迷宫的起点坐标:;
cinstart.rowstart.line;
cout迷宫的终点坐标:;
cinend.rowend.line;
coutendl;
if(MazePath(start,end)){
cout迷宫的通路:endl(其中*表示外墙,#表示迷宫内障碍物,.为通路)endlendl;
PrintMaze(r,l);
}
else cout迷宫没有通路!endl;
free(S.base);
return 0;
}
2)栈模块
3)迷宫模块
各模块的调用关系如下:
4)求解迷宫的通路的伪码算法:
设定当前位置的处值为入口位置;
DO
{
若当前的位置可通。
则{将当前的位置插入栈顶;
若该位置为出口位置,则结束;
否则切换当前位置的东邻的为新的当前位置;}
否则{
若栈不为空且栈的顶位置尚有其他的方向没有被探索,
则设定新的当前位置为沿顺时针方向旋转找到栈顶的位置的下一个相邻块;
若栈不空但栈顶的四周均不可通过,
则{删去栈顶位置;
若栈不为空,则重新测试新的栈顶位置;
只至找到一个可通过的块至栈空;
}
1 坐标的位置的类型
typedef struct{
int line;
int row;
}PosType;2 迷宫类型
void CreatMaze(int r,int l)//定义迷宫的墙为*,通路为_,障碍为#
{
int i,j;
for(i=0;ir;i++){
maze[i][0]=*;//左面墙
maze[i][l-1]=*;//右面墙
}
for(j=1;jl-1;j++){
maze[0][j]=*;//上面墙
maze[r-1][j]=*;//下面墙
}
for(i=1;ir-1;i++)
for(j=1;jl-1;j++)
maze[i][j]=_;
cout请输入迷宫内障碍物的
您可能关注的文档
最近下载
- 苏教版(2024版)七年级上册生物期末复习知识点清单.docx VIP
- 基于项目的温室气体减排量评估技术规范 太阳能热利用 编制说明.pdf VIP
- 2025年自动驾驶出租车(Robotaxi)商业化试点与运营模式优化报告.docx
- 石家庄铁道大学2022届毕业生质量报告.docx VIP
- 2024-2025学年小学美术一年级上册(2024)桂美版(2024)教学设计合集.docx
- Por Una Cabeza 一步之遥(总谱)Carlos Gardel曲曲谱.pdf VIP
- 量子信息与量子计算PPT课件.ppt VIP
- 建设用地报批培训课件.ppt VIP
- 匈牙利舞曲第五号-总谱(勃拉姆斯).pdf VIP
- 九华山风景区全域旅游基础设施建设项目实施方案.pdf VIP
文档评论(0)