- 20
- 0
- 约2.85千字
- 约 21页
- 2017-09-06 发布于重庆
- 举报
3.3 栈的应用--迷宫求解 例四、迷宫【问题描述】 以一个 m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路。或得出没有通路的结论 迷宫用计算机来求解方法其实很简单, 就是走遍所有可能的路径,直到找到出口为止, 当走到错误的路线的时候,就退回上一个路口交叉点,选择其他方向. 这种思维其实用堆栈(stack)完全可以解决 迷宫思路 ?在设计这个问题时,我考虑到以下几点:????????1、迷宫入口和出口的坐标????????2、保存迷宫的2维数组????????3、获得路径的函数我们模仿人走迷宫时的思路,设置一个当前点,一个目标点(下一个要走的点)。初始情况下当前点为入口,终止条件为当前点为出口,这样,我们的函数大概结构就出来了。????????在从入口到出口的过程中程序对当前点的上、下、左、右四个点依次进行判断,当发现任一个方向是未走过的区域时,就将当前点指向那个点进行尝试,同时将当前点入栈并做标记。而当4个方向都不通或已走过时,则为死路,标记当前点为死路并从栈中弹出上一个点继续进行尝试,这时因为当前点已被标记为死路,则弹出上一个点时就不会重复这条路,达到寻找正确路径的效果。 描述: 当前点: 坐标位置(x,y),可用二维数组实现(seat) 记录当前点探索的方向:di 如起点为(1,1),先判断东(1),南(2),西(3),北(4),顺时针方向转,判断其邻居是否通,不同的话,邻居转向下一个方向探索,若均不通,则按原路返回,退栈.取栈顶元素,沿下一个方向探索 注意:凡走过的也要标记符号: 迷宫的分析 迷宫设置为一个2维数组,通路为1,不通为0,但是四周为屏障 设置一个栈来存储迷宫的路径:记录每个位置的坐标值(x,y),同时将纳入栈中的路径,记录它来自何方,也就是记录它的探测方向编号(东,南,西,北类似于地图的指示,1,2,3,4) 通的话就入栈操作:(x,y,di) 探测当前坐标位置的所有邻居均不通:出栈,打上脚印,此路不通,不再加入 再对栈顶重新探测寻求新的邻居入栈 直到达到迷宫出口(有解)或退回到原路的入口(无解) 程序流程图 迷宫算法 迷宫演示见cd中的递归 cd迷宫 DS-Algo-VC下的第三章算法3.3 实验内容 一个m×n的迷宫,0:畅通,1:障碍, 设计一个程序,对任意设定的迷宫,求出从入 口到出口的通路。入口:1 1;出口:6 8 0 1 0 1 1 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 0 0 实现提示 1.用一种称为广度搜索的算法,将迷宫的入 点(1,1)作为第一个出发点,向四周搜 索可通行的位置,形成第一层新的出发 点,然后对第一层中各个位置再分别向四 周搜索可通行的位置,形成第二层新的出 发点,如此进行下去直至到达迷宫的出口 点(m,n)为止。 实现提示 2.为了避免多次检测是否走到边沿,将迷宫 周围各镶上一条边,相当于在迷宫的周围 布上一圈不通过的的墙。 3.为了避免有的点被重复到达,应标志已通 过的位置,可以采用一个标志数组来标志 已通过了的位置。 实现提示 4.为了记录搜索过程中到达位置及其出发 点,可以建立一个结构体数组,数组的每 组元素有三个域x,y,pre,其中分别记 录x和y到达位置的行、列坐标,pre记下 其出发点在数组中的坐标 程序流程图 注意问题 1.同学们可以先按照给定的迷宫去做,完 成的情况下可以将迷宫改成可根据输入 变化的任意迷宫。 2.注意数组表示的迷宫下标和现实迷宫下 标的不同。 3.跟踪迷宫求解过程中程序的执行情况, 以加深对程序执行过程的理解。 注意问题 4.注意调试过程中的问题记录,以提高程 序调试的能力 5.调试过程中遇到死循环可用Ctrl+C或 Ctrl+Break退出。 实验结果 不同的算法会产生不同的结果。 * * * * 例四、 迷宫求解 通常用的是“穷举求解”的方法 ? ? ? ? ? ? ? ? ? ? ? ? ? 1 1 1 1 2 2 2 2 2 3 2 1 3
您可能关注的文档
- 《互锁控制的编程方法》教学设计.doc
- 《数字图像处理和分析》网络课件设计和实现.ppt
- 01人际关系的意义与重要性.ppt
- 1.1.3混合物的分离与提纯—蒸馏、萃取、分液.ppt
- 2.3价值分析、成本估算方法.ppt
- 2.82.8模塑工艺规程的编制.ppt
- 2--java的23种设计模式.ppt
- 03冶金熔体的结构.ppt
- 3-5关系及其表示.ppt
- 4.4实验:研究平抛物体的运动.ppt
- 伟明环保-市场前景及投资研究报告-境内业务稳健运行,印尼市场贡献边际增量.pdf
- 桂东县法院系统招聘考试真题2025.pdf
- 贵州省黔南布依族2026年中考三模物理试题及答案.pdf
- 贵州省黔南州2026年中考语文二模试卷附答案.pdf
- 贵州省铜仁市2026年中考语文二模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套完整答案详解.docx
- 贵州省毕节市2026年中考语文一模试卷附答案.pdf
- 贵州省贵阳市南明区2026年中考语文一模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套参考答案详解.docx
- 贵州省贵阳市白云区2026年中考二模物理试题附答案.pdf
最近下载
- 人教版八年级历史下册知识点.doc VIP
- 2025年南昌健康职业技术学院单招(语文)测试模拟题库审定版.docx VIP
- ISO 5817-2023 焊接一钢、镰、铁及其合金的熔化焊接头(能量柬焊除外) 缺欠质量等级(中文版).pdf
- 2025年西藏自治区中考化学真题(含答案).pdf
- 【北师大版】五年级上册数学复习测试卷 (2).doc VIP
- 2025年高考真题——地理(湖南卷)含答案 .pdf VIP
- 【北师大版】五年级上册数学期末测试卷(含答案).docx VIP
- 2025年西藏中考道德与法治试卷及答案 .pdf VIP
- 2026年春八年级下册道德与法治全册知识点汇总.docx VIP
- 【北师大版】五年级数学上册《分数加减法》单元测试卷.doc VIP
原创力文档

文档评论(0)