数据结构迷宫求解.ppt

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

迷宫求解问题迷宫【问题描述】以一个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),同时将纳入栈中的路径,记录它来自何方,也就是记录它的探测方向编号(东,南,西,北类似于地图的指示,0,1,2,3)通的话就入栈操作:(x,y,di)探测当前坐标位置的所有邻居均不通:出栈,打上脚印,此路不通,不再加入再对栈顶重新探测寻求新的邻居入栈直到达到迷宫出口(有解)或退回到原路的入口(无解)程序流程图迷宫算法**通常用的是“穷举求解”的方法?????????????1111222223213313442412512641631531443$$$$$$$$开始迷宫求解构建迷宫结束打印路径判断当前结点是否通畅通畅,则记录该点到栈中,并判断是为终点,不为终点的话,继续前行探索不通畅,则后退,换方向访问,到栈空结束设置访问东邻居开始,若其不通,换方向探路邻居访问遍,均不通,退出此结点,取当前栈顶的未访问邻居探路总结:对于一个入栈的节点要记录其位置(x,y),同时记录其探索邻居的方向di(0,1,2,3)记录四个邻居同时对于已经退出的节点标记无需标记其”不通”,只要沿下一个方向转圈就可.

文档评论(0)

iris + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档