- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
005堆栈.ppt
* * 假定用n×m的矩阵来描述迷宫,位置( 1 , 1 )表示入口,(n,m) 表示出口,n和m分别代表迷宫的行数和列数。 迷宫中的每个位置都可用其行号和列号来指定。在矩阵中,当且仅当在位置(i,j)处有一个障碍时其值为1,否则其值为0。 迷宫的描述 * * 迷宫的描述 * * 首先把迷宫的入口作为当前位置。 如果当前位置是迷宫出口,那么已经找到了一条路径,搜索工作结束。 如果当前位置不是迷宫出口,则在当前位置上放置障碍物,以便阻止搜索过程又绕回到这个位置。 然后检查相邻的位置中是否有空闲的(即没有障碍物),如果有,就移动到这个新的相邻位置上,然后从这个位置开始搜索通往出口的路径。如果不成功,选择另一个相邻的空闲位置,并从它开始搜索通往出口的路径。 如果所有相邻的空闲位置都已经被探索过,并且未能找到路径,则表明在迷宫中不存在从入口到出口的路径。 方案 * * 对于迷宫内部的位置(非边界位置),有四种可能的移动方向:右、下、左和上。 对于迷宫的边界位置,只有两种或三种可能的移动。 为了避免在处理内部位置和边界位置时存在差别,可以在迷宫的周围增加一圈障碍物。 简化算法 * * 迷宫的描述 * * 可以用行号和列号来指定每个迷宫位置,行号和列号被分别称之为迷宫位置的行坐标和列坐标。 可以定义一个相应的类Position来表示迷宫位置,它有两个私有成员row和col。 为保存从入口到当前位置的路径,可以采用以下基于公式化描述的堆栈: StackPosition path(MaxPathLength); 其中MaxPathLength是指最大可能的路径长度(从入口到迷宫中任一位置)。 位置表示 * * 按一种固定的方式来选择可行的位置,将可以使问题得到简化。 例如,可以首先尝试向右移动,然后是向下,向左,最后是向上。 移动到相邻位置的方法 * * 移动到相邻位置的方法 * * 假定maze、m (迷宫的大小)和path都是按如下方式定义的全局变量: int **maze, m; StackPosition *path; 迷宫算法实现 * * bool FindPath() {// 寻找从位置( 1 , 1 )到出口( m , m )的路径 //如果成功则返回true ,否则返回f a l s e // 如果内存不足则引发异常N o M e m path = new StackPosition(m * m - 1); //对偏移量进行初始化 Position offset[ 4 ]; offset[0].row = 0; offset[0].col = 1; //向右 offset[l].row = 1; offset[l].col = 0; // 向下 offset[2].row = 0; offset[2].col = -1; //向左 offset[3].row = -1;offset[3].col = 0; //向上 搜索迷宫路径的代码 * * //在迷宫周围增加一圈障碍物 for (int i = 0; i = m+l; i++) { maze[0][i]= maze[m+l][i]= 1; //底和顶 maze[i][0]= maze[i][m+l]= 1; // 左和右 } Position here; here.row = 1; here.col = 1; maze[i][i]= 1; // 阻止返回入口 int option = 0; int LastOption = 3; 搜索迷宫路径的代码 * * //寻找一条路径 while (here.row!=m||here.col!=m){// 不是出口 //寻找并移动到一个相邻位置 int r, c; while (option = LastOption) { r = here.row + offset[option].row; c = here.col + offset[option].col; if (maze[r][c]== 0) break; option++; //下一个选择 } 搜索迷宫路径的代码 * * // 找到一个相邻位置了吗? if (option = LastOption){//移动到maze[r][c] path-Add( here ) ; here.row = r; here.col = c; //设置障碍物以阻止再次访问 maze[r][c]= 1; option = 0; } 搜索迷宫路径的代码 * * else {//没有可用的相邻位置,回溯 if (path-IsEmpty()) return false; Position next; path-Delete(next) ; if (n
您可能关注的文档
最近下载
- 八代雅阁原车音响升级操作指导书.pdf VIP
- 动物疫病防治技术 动物疫病防治技术 4能力单元四 猪的传染病 4-2 猪链球菌病.ppt VIP
- 自然人独资股权转让协议.docx VIP
- 小学生活垃圾归类课件PPT.pptx VIP
- 化学品安全培训内容.pptx VIP
- 视器-眼-人体解剖学ppt课件-感觉器官.pptx VIP
- 静配中心PIVAS静脉用药调配中心设备的保养及维护.pptx VIP
- 义务教育版(2024)七年级全一册信息科技 第6课 数字身份辨设备 课件.pptx VIP
- 第9课《天上有颗“南仁东星”》课件++++++++++++2025-2026学年统编版语文八年级上册.pptx VIP
- 菜点酒水知识试卷.pdf VIP
文档评论(0)