迷宫求解(有流程图).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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请输入迷宫内障碍物的

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档