零零散散学算法之详解几种最短路径

本文详细介绍了三种最短路径算法:戴克斯特拉算法、弗洛伊德算法和A*搜索算法。戴克斯特拉算法适用于有向图中单个源点到其他顶点的最短路径问题,弗洛伊德算法能解决有向带权图中两顶点间最短路径,而A*搜索算法常用于游戏路径规划,通过估值函数f(n)=g(n)+h(n)进行启发式搜索。
摘要由CSDN通过智能技术生成
深入解析最短路径算法

正文
 
第一节 问题的提出及解决方法
       所谓最短路径问题,可以说有两种情况来描述。
       描述一:在图论中,指的是寻找图中两个节点之间的最短距离。如下图

       描述二:在现实生活中,指的是找到从一个地方到另一个地方的最近距离。如下图

       上述两种情况的本质是一样的,即求一个点到另一个点的最短路径。好了,问题已经提出来了,那怎么解决呢?解决该问题的方法还是比较多的,不过由于各个路径算法所对应的问题条件不同,我们可根据不同的情况,选择不同的路径算法。
       本文将介绍三种最短路径算法,分别是:戴克斯特拉算法(Dijkstra algorithm),弗洛伊德算法(Floyd algorithm)以及A*搜索算法。

第二节 戴克斯特拉算法(Dijkstra algorithm)
       该算法解决的是有向图中单个源点到其他顶点的最短路径问题。

戴克斯特拉算法的实现过程如下:
       第一步:用带权的矩阵WeiArcs来表示带权有向图,如果图中的两个顶点vi和vj是连通的,则用WeiArcs[i][j]表示这两个顶点所形成边的权值;如果vi和vj不连通,即<vi,vj>这条边不存在,那么将WeiArcs[i][j]置为∞。
       第二步:设S为已求得的从某一顶点v始发的最短路径的终点的集合,且S的初始状态为空,初始化时,将始发顶点置于S集合中。那么从v出发到图中其余各个顶点vi可能达到的最短路径长度的初值为D[i]。
       第三步:选择一顶点vj,使得vj就是当前求得的一条从顶点v出发的最短路径的终点。此时令S = S ∪ {vj}。
       第四步:修改从v出发到集合V-S(V为图顶点的集合&#
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值