最短路径算法(Dijkstra)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径算法(Dijkstra)相关的知识,希望对你有一定的参考价值。

参考技术A Dijkstra( 迪科斯特拉 )算法是用来解决单源最短路径的算法,要求路径权值非负数。该算法利用了深度优先搜索和贪心的算法。

下面是一个有权图,求从A到各个节点的最短路径。

第1步:从A点出发,判断每个点到A点的路径(如果该点不能直连A点则距离值为无穷大,如果该点能和A直连则是当前的权值),计算完之后把A点上色,结果如下图:

第2步:从除A点之外的点查找到距离A点最近的点C,从C点出发查找其邻近的节点(除去已上色的点),并重新计算C点的邻近点距离A点的值,如图中B点,若新值(C点到A点的值+C点到该点的路径)小于原值,则将值更新为5,同理更新D、E点。同时将C标记为已经处理过,如图所示涂色。

第3步:从上色的节点中查找距离A最近的B点,重复第3步操作。

第4步: 重复第3步,2步,直到所有的节点都上色。

最后就算出了从A点到所有点的最短距离。

leetcode 743题

在解决最短路径优化问题中,Dijkstra算法都有哪些优.缺点?

简明扼要即可。

在Dijkstra算法的基础上作一些改动,可以扩展其功能。例如,有时希望在求得最短路径的基础上再列出一些次短的路径。为此,可先在原图上计算出最短路径,然后从图中删去该路径中的某一条边,在余下的子图中重新计算最短路径。对于原最短路径中的每一条边,均可求得一条删去该边后子图的最短路径,这些路径经排序后即为原图的一系列次短路径。
Bellman-Ford算法可用于具有负花费边的图,只要图中不存在总花费为负值且从源点 s 可达的环路(如果有这样的环路,则最短路径不存在,因为沿环路循环多次即可无限制的降低总花费)。
参考技术A 优先队列实现的dijkstra速度较快,但dijkstra不能处理负权边

以上是关于最短路径算法(Dijkstra)的主要内容,如果未能解决你的问题,请参考以下文章

最短路径 Dijkstra 算法为啥边上的权值非负阿?

最短路径算法(Dijkstra)

图文解析 Dijkstra单源最短路径算法

图-最短路径-Dijkstra及其变种

在解决最短路径优化问题中,Dijkstra算法都有哪些优.缺点?

最短路径 - Dijkstra算法