迷宫问题(竞赛必备)

知识回顾:

  • dijkstra算法

先求出一个的最短路径,然后一步一步求它们的最短路径

//求有向网G的V0顶点到其余顶点V的最短路径P[V]及带权长度D[v]
//P[V]的值为前驱顶点下标,D[v]表示V0到V的最短路径长度和
void ShortestPath_Dijkstra(MGraph G,int v0,Patharc *p,ShortPathTable *D)
{
    int v,w,k,min;
    int final[MAXVEX];//final[w]=1表示求得顶点V0至VW的最短路径
    for(v=0;v<G.nummVertexes;v++)//初始化数据
    {
        final[v]=0;//全部顶点初始化为未知最短路径状态
        (*D)[v]=G.arc[v0][v];//将与V0点有连线的顶点加上权值
        (*p)[v]=-1;//初始化路径数组P为-1
    }
    (*D)[v0]=0;//V0至V0路径为0
    final[v0]=1;//V0至V0不需要求路径
    //开始主循环,每次求得V0到某个顶点v的最短路径
    for(v=1;v<G.nummVertexes;v++)
    {    min=INFINITY;//当前所知离V0顶点的最近距离
        for(w=0;w<G.nummVertexes;w++)//寻找离V0最近的顶点
        {
            if(!final[w]&&(*D)[w]<min)
            {
                k=w;
                min=(*D)[w];//w顶点离V0顶点更近
            }
        }
        final[k]=1;//将目前找到的最近的顶点置为1
        for(w=0;w<G.nummVertexes;w++)//修正当前最短路径及距离
        {
        	//如果经过V顶点的路径比现在这条路径的长度短的话
            if(!final[w]&&(min+G.arc[k][w]<(*D)[w]))
            {//说明找到了更短的路径,修改D[w]和P[w]
                (*D)[w]=min+G.arc[k][w];//修改当前路径长度
                (*P)[w]=k;
            }
        }
    }
}

题目引入:

迷宫问题

在给定区域内,找到一条,或者从某个位置到另一个位置的移动路线。

可以类比走迷宫,不过是求最优解

一个动态演示
寻路.js (qiao.github.io)icon-default.png?t=N2N8https://qiao.github.io/PathFinding.js/visual/

这个还挺有趣,能够直观感受不同方式所产生的不同效果 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏生十一_Nojambot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值