迷宫---多出口迷宫的最短路径

如图是一个有三个出口的迷宫,现在来求它的最短路径(不带环)
这里写图片描述
思想:定义两个栈,一个栈存放当前路径。一个栈存最短路径,每次都将当前路径和最短路径比较如果当前路径小于最短路径,那就交换两个栈中的元素
代码实现:

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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值