简介:
Dijkstra算法是一种单源路径算法。时间复杂度为:O(n^2).比Floyd算法(O(n^3)快很多。当然,Dijkstra算法可以用堆优化后,算法复杂度成了(O(m+n)logn),复杂度更底了。本文只讲解Dijkstra的简单算法。
问题:
给予n个城市和m条道路,求从城市1到城市n的最短距离。(可见POJ2387,5个城市,5条道路)
思路:
与Floyd算法点松弛不同,Dijkstra算法通过松弛边的做法找到从某一个点到其他各个点的最小值。
比如我们求从点1到其他点的最短路径。则设立一个dist数组表示从1到其他点的距离为 0 20 ∞ ∞ ∞ 100.
则,我们在这里面先找到最短的路径。20,则20这个点必然是1号到2号的最短路径,这个点的值确定了。接下来,我们在根据这个已经确定的点,算其他边,点2的出边有3,比较1到3的距离原来是∞,然后1-2-3的距离变成20+30 = 50 (这个值小于∞,故可以更新这个点。即(dist数组值变为:0 20 50 ∞ ∞ 100