如图是一个有三个出口的迷宫,现在来求它的最短路径(不带环)
思想:定义两个栈,一个栈存放当前路径。一个栈存最短路径,每次都将当前路径和最短路径比较如果当前路径小于最短路径,那就交换两个栈中的元素
代码实现:
void MazeInit2(Maze* maze)
{
if(maze == NULL)
{
return;
}
int map[MAX_ROW][MAX_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;
for(;i < MAX_ROW;++i)
{
size_t j = 0;
for(;j < MAX_COL;++j)
{
maze->map[i][j] = map[i][j];
}
}
return;
}
void _GetShortPath(Maze* maze,Point cur,Point entry,SeqStack* cur_path,SeqStack* short_path)
{
//1.判断当前是否能落脚
if(!CanStay(maze,cur))
{
return;
}
//2.如果能落脚,就对当前点进行标记,同时把当前点插入到cur_path
Mark(maze,cur);
SeqStackPush(cur_path,cur);
//判断当前点是否是出口
if(IsExit(maze,cur,entry))
{
//a)如果是出口,说明找到了一条路径,拿当前路径和short_path中的路径进行对比
//,如果当前路径比short_path短,或short_path本身是一个空栈
// 就用当前路径代替short_path
printf("找到一条路经!\n");
if(cur_path->size < short_path->size || short_path->size == 0)
{
printf("找到一条比较短的路径!\n");
SeqStackAs