



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用栈寻找迷宫路径李良益 2013地球信息科学与技术2015 5.121. 需求分析因为迷宫的特点,走的通或走不通,可以用1和0表示,所以在计算机可以用抽象方法表示迷宫,用如图所示的01图表示迷宫。图中1为通道,0为墙,所求通道为简单通道,即所求路径上不能出现同一通道块。迷宫文件以“maze.txt”的文件名读取。文件内容如下:0 0 0 0 0 0 0 0 0 00 1 1 0 1 1 1 0 1 00 1 1 0 1 1 1 0 1 00 1 1 1 1 0 0 1 1 00 1 0 0 0 1 1 1 1 00 1 1 1 0 1 1 1 1 00 1 0 1 1 1 0 1 1 00 1 0 0 0 1 0 0 1 00 0 1 1 1 1 1 1 1 00 0 0 0 0 0 0 0 0 0在计算机中迷宫0以爱心符号表示,1则用空白,再输入两个坐标,表示起点和终点,横纵坐标从0开始。若坐标不在迷宫之内,则要求重新输入。最后输出带有有路径的迷宫。2. 主体设计 先考虑程序主要流程:打开文件“maze.txt”,并读取到二维数组且备份,初始化栈,寻找路径并存入栈中,提取路径,打印备份。程序设计主要有3个要点,即定义位置,栈与栈的元素1)位置的定义typedef structint x;int y;postype;2) 栈的定义typedef structint ord;postype seat;int di;SElemType;c)栈元素定义typedef structSElemType *base;SElemType *top;int stacksize;SqStack;将它们都定义为全局变量:SqStack S = 0, 0, 0 ;使用的栈SElemType e = 0, 0, 0 , 0 ;当前位置int maze1010;迷宫postype start = 0, 0 , end = 0, 0 ;开始和结束位置子函数包括四个对栈的操作:Status InitStack();初始化栈Status GetTop(); 得到栈顶元素Status Push();元素入栈Status Pop();元素出栈两个寻找相关路径的操作i:int next();修改当先位置为下一个前进位置或者是要测试的位置Status FindPath();主函数调用,找到路径存入栈中3. 详细设计假设“当前位置”指的是“在搜索过程中某一时刻所在图中某个方块的位置”则求迷宫中一条路径的算法的基本思想是:若当前位置可通,则纳入“当前路径”,并继续朝下一位置探索,即切换下一位置为当前位置,如此反复,直到达到出口;若当前位置不可通,则应顺着来向退向前一通道块,然后朝着来向之外的其他方向探索;若该通道块的四周4个方块均不可通,则应从当前路径删除该通道块。所谓下一位置指的是当前位置四周四个方向,假设栈S记录当前路径,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳入路径”的操作即为入栈,“从当前路径上删除前一通道块”的操作即为出栈。求一条路径的算法可简单描述如下:do若当前位置可通,则当前位置插入栈顶;若该位置是出口,则结束;否则,切换当前位置的东临块为新的当前位置;否则,若栈不空且栈顶位置尚有其他位置可以搜索, 则设定新的当前位置为沿顺时针方向找到的栈顶位置的下一临块;若栈不空,但栈顶位置四周均不通,则删去栈顶位置;若栈不空,则重新测试新的栈顶位置,直到找到一个可通的相邻块或出栈至栈空;while(栈不空);在此,尚需说明的一点是,所谓当前位置可通,指的是未经走到过的通道块,即要求该通道块不仅是通道块,而且既不在当前路径上(否则所求路径不是简单路径),而且不是曾经纳入过的通道块,(否则只能在死胡同里转圈)主要功能函数:Status FindPath()int n=1;doif (mazee.seat.xe.seat.y = 1)Push();mazee.seat.xe.seat.y = 0;if (e.seat.x = end.x&e.seat.y = end.y)return 0;elsee.di = 0;next(e);elseif (S.top != S.base&e.di 4)next(e);if (S.top != S.base&e.di = 4)mazee.seat.xe.seat.y = 0;Pop(); Pop();mazee.seat.xe.seat.y = 1;while(S.base!=S.top);return 0;修改当前一通道块为下一通道块的函数:int next()if (e.di = 0) e.di+; e.seat.y+; return 0; if (e.di = 1) e.di+; e.seat.x+; e.seat.y-; return 0; if (e.di = 2) e.di+; e.seat.y-; e.seat.x-; return 0; if (e.di = 3) e.seat.x-; e.seat.y+; if (mazee.seat.xe.seat.y = 0)e.di+;return 0; 4. 调试分析(1) 出现的错误问题有如下,当程序中路径设计不够完善时,没考虑仔细,有点代码忘记写时,会出现错误,比如每个坐标路径的判断,需要进行一步一步的调试,观察每一个变量的值的变化情况。调试完成,进行实验验证,看是否是最佳路径,不然继续调试。张老师教导当遇到错误时,进行一步一步调试是很有效果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 唐宋建筑改造方案设计理念
- 建筑方案设计通过率
- 电动分割幕安装施工方案
- 住建部施工方案编制模板
- 咨询方案汇报表达
- 清明节茶叶营销方案主题
- 护理职业教育录播课大纲
- 团委外出活动策划方案
- 校园防性侵安全教育教案
- 自动喂食器营销策划方案
- 铸造企业安全生产标准化管理体系方案资料汇编(2022-2023新标准实施模板)
- 设备维修与保养(课件)
- 浅谈国内外深基坑支护技术的现状及进展
- 网络舆情应对及处置
- 工业数据采集技术及应用 -配置能源采集仪表参数
- 《应急救援知识》课件
- 【一例重症肺炎的个案护理案例报告6000字(论文)】
- 电梯使用维护说明书
- 专业方向证明
- 范里安-微观经济学:现代观点
- 传热学全套PPT完整教学课件
评论
0/150
提交评论