上一次解决了迷宫问题的简单求解,如果迷宫中存在多通路,我们想要找寻一条最短的路径该如何解决。
最短路径求解
首先构造一个多通路迷宫:
void MazeInitShortPath(Maze* m)
{
int map[ROW][COL]={
{0,1,0,0,0,0},
{0,1,1,1,0,0},
{0,1,0,1,1,1},
{1,1,1,0,0,0},
{0,0,1,0,0,0},
{0,0,1,0,0,0},
};
//循环赋值
size_t i=0;
size_t j=0;
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
m->maze[i][j]=map[i][j];
}
}
}
对于求最短路径,我采用的思路是:找到左右的路径,如何从中筛选出最短的一条路径。
代码如下:
代码中有详细注释
//尝试找到所有的路径,然后筛选出一条最短的
//递归版本
void _GetShortPath(Maze* m,Point entry,Point cur,SeqStack* cur_path,SeqStack* short_path)
{
printf("(%d,%d)\n",cur.x,cur.y);
//1。判定当前点是否能落脚,
if(!CanStay(m,cur))
{
return;
}