- 6
- 0
- 约1.38万字
- 约 79页
- 2016-03-14 发布于湖北
- 举报
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
您可能关注的文档
- +湖北省2014年人教版中考复习,九年级物理第十八章《+电功率复习》资料.ppt
- --只有一个细胞的生物体资料.ppt
- --向心力资料.ppt
- -不同等级城市的服务功能资料.ppt
- -产科超声标准切面张图资料.ppt
- -从地球变暖谈起资料.ppt
- -代谢综合征资料.ppt
- -催化剂与催化作用资料.ppt
- -向心力资料.ppt
- -大环内酯类抗生素资料.ppt
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
原创力文档

文档评论(0)