迷宫最短路径问题
2015-09-18 13:50
190 查看
0表示通路,1表示墙。
迷宫如下:
0, 0, 0, 0, 0,
1, 0, 1, 0, 1,
0, 0, 1, 1, 1,
0, 0, 0, 0, 0,
0, 0, 0, 1, 0
迷宫的最短路径问题可以初步分解为三步:
首先第一步是能够寻找出一条通路,从入口到出口;
其次,能够找到所有的通路;
最后,通路中的最短路径。
基本判断思路为:从出口向入口搜寻通路,搜寻算法如下
搜寻代码如下:
需要注意的是,如果迷宫没有添加外围墙那么需要自己加上。
程序结果:
迷宫如下:
0, 0, 0, 0, 0,
1, 0, 1, 0, 1,
0, 0, 1, 1, 1,
0, 0, 0, 0, 0,
0, 0, 0, 1, 0
迷宫的最短路径问题可以初步分解为三步:
首先第一步是能够寻找出一条通路,从入口到出口;
其次,能够找到所有的通路;
最后,通路中的最短路径。
基本判断思路为:从出口向入口搜寻通路,搜寻算法如下
搜寻代码如下:
for (di=0;di<4;di++) { switch (di) //4个方向 { case 0: i=x-1; j=y; break; //上 case 1: i=x+1; j=y; break; //下 case 2: i=x; j=y-1; break; //左 case 3: i=x; j=y+1; break; //右 }; if (maze[i][j]==0 && p[i][j].depth>p[x][y].depth+1 ) //通路且路径深度<前一步深度+1 { p[i][j].depth=p[x][y].depth+1; p[i][j].pre_x=x; //存储前一个位置 p[i][j].pre_y=y; x=i; y=j; break; } else if (di==3) // 没有可走的路 { i=x,j=y; x=p[i][j].pre_x; //回溯 y=p[i][j].pre_y; if ( i==end_x && j==end_y && p[i][j].tag) FinishTag=1; //回溯到出口 break; };
需要注意的是,如果迷宫没有添加外围墙那么需要自己加上。
程序结果:
相关文章推荐
- Test:开通博客
- 结对博客(Java通信项目QQ)
- 阅读 LdrInitializeThunk
- js实现图片旋转
- 就写个外键
- 时间序列模型之灰度模型
- ubuntu12.04 set python-pandas
- iOS9适配必看指南
- 二 Schema简介
- BigDecimal.setScale 处理java小数点
- 初探oVirt-缓存ovirt相关的rpm包到本地yum源中
- handlePollCalls方法详解
- android项目源码大全
- 猫学习IOS(十五)UI以前的热的打砖块游戏
- 使用JavaWeb项目的路径参数问题总结
- C++多态
- POJ 3276 Face The Right Way
- oj平台上标准输入输出
- .c和.h文件的区别
- 做好软件测试需要具备的思维方式