您的位置:首页 > 其它

迷宫最短路径问题

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

迷宫的最短路径问题可以初步分解为三步:

首先第一步是能够寻找出一条通路,从入口到出口;

其次,能够找到所有的通路;

最后,通路中的最短路径。

基本判断思路为:从出口向入口搜寻通路,搜寻算法如下



搜寻代码如下:

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;
};


需要注意的是,如果迷宫没有添加外围墙那么需要自己加上。

程序结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: