- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于栈实现的迷宫问题
基于栈实现的迷宫问题
1、问题描述:
在一个二维阵列构成的迷宫里, 数组元素仅有0和1构成,其中 0表示可通行的路径, 1代表障碍。另外,定义左上角是迷宫的入口, 右下角是迷宫的出口, 在迷宫里面只允许上下左右四个方向行走,请找出一条通路。
2、算法基本思想:
由于计算机解迷宫时,通常用的是“穷举求解”的方法,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中采用“栈”进行求解。
2.1、迷宫构建:
为了避免每走一步便需判断是否走出迷宫的麻烦,将所创建的迷宫用1包围起来。
2.2、位置搜索:
每到一处,总让它按上、下、左、右4个方向试探下一个位置;如果某方向可以通过,即该方向上的元素为0,则前进一步,并在新位置上继续进行搜索;如果4个方向都走不通或曾经走过,则后退一步,在原来的位置上继续试探下一位置。
每前进一步,都要进行判断:若前进到了出口处,则说明找到了一条通路;若退回到了入口处,则说明不存在通路。
3、算法运行环境:
VC++6.0
4、主要函数:
Mazepath函数:
求解迷宫maze中,从入口start到出口end的一条路径
若存在,返回TRUE,否则返回FALSE
InitMaze函数:
创建初始矩阵
按照用户输入的数据构建0/1矩阵,并在矩阵四周添加一圈1作为围墙。
Pass函数:
判断当前节点能否通过。
FootPrint函数:
对于走过的节点用 * 进行标记。
MarkPrint函数:
对于不能通过的节点用 # 进行标记。
Nextpos函数;
返回当前节点的下一结点,对应东、西、南、北四个方向。
Printmaze 函数:
打印迷宫信息,存在的通路用 * 表示。
5、算法举例:
5.1、输入的矩阵:
运行结果:
5.2、输入的矩阵:
运行结果:
没有找到通路
算法复杂度分析:(n为迷宫的行数,m为迷宫的列数)
走迷宫O(n*m*2)。
文档评论(0)