Dijkstra算法

Dijkstra算法是一种单源最短路径搜索算法。

算法步骤:

开始的结构我们称为初始节点。Y距离为Y点到初始节点的距离。Dijkstra算法会给定Y距离的初始值。并且一步步的优化他

1.给定每个节点一个不可靠的值(需要被跟新的。或者可能被跟新的),初始节点为0.其他节点为无穷大。

2.设置一个数组标志每个节点不可见(除了初始节点)。设置初始节点为当前节点。

3.考虑当前节点的所有不可见邻节点、并且计算它们的实验值。如果当前节点标志的距离是6,并且有一邻节点B的距离是2,所以距离B(通过A)就是6+2=8.

如果这个值小于以前记录的不可靠数值。那么就更新他。

4.当我们考虑了所有该节点的邻节点后。设置当前节点为可见的,重不可见数组中移除。可见节点不会重新计算。

5.如果目的节点已经可见。或者所有所有不可见节点都为无穷大。算法结束。

6.选择当前节点不可见的最短的节点。设置为当前节点,重复步骤3.


看算法比较麻烦不好懂。下面实例分析下,大家就应该懂了。let us go。

这是我们的有向图。


算法过程


第一步:设置不可靠的值。

s为可见的节点。设置好所有的初始值。因为初始一栏里面最小的是10.所以选择2节点为当前节点。2节点邻节点只有3.10+30 < maxint,更新他。到达第二栏。

再选择最小的节点是30(当前节点已经在可见里面了,不需要再算)也就是节点4.设置节点4为当前节点。节点4到3为30 + 20 < 50 更新。节点4到5 30 + 60 < 100,更新为90.就这样一直算下去。

算到最后所有的节点都是可见的就结束。


实例2:Dijkstra's algorithm runtime 实例3.


代码就不上了。


原文地址:https://www.cnblogs.com/xiaokangzi/p/3576150.html