之前有说过一条简单的迷宫之路求解(只有一条出路且不带环)
这一篇讲的是如何处理多条出路的情况。
主要思路:借用两个栈,一个保存当前出路的路径点,一个保存最短的出路的路径点。每找到一条出路则对比最短出路,哪一条路短,则存到最短路径栈中。
首先我们先初始化一个栈:
void MazeInitShortPath(Maze* maze)
{
if (maze == NULL)
return;
int map[MAX_ROW][MAX_COL] =\
{
{0,1,0,0,0,0},
{0,1,1,1,1,1},
{1,1,0,0,0,0},
{0,1,1,0,0,0},
{0,0,1,0,0,0},
{0,0,1,0,0,0}
};
size_t i = 0;
for(; i < MAX_ROW; ++i)
{
size_t j = 0;
for(; j < MAX_COL; ++j)
maze->map[i][j] = map[i][j];
}
return;
}
辅助函数:将当前路径赋值到最短路径栈中
void SeqStackAssgin(SeqStack* from, SeqStack* to)
{
if(from == NULL || to == NULL)
return;
SeqStackDestroy(to);
to->size = from->size;
to-&g