『算法原理』
最短路径(Shortest Path):一个结点到另一个结点的最小权值和。
Dijkstra算法同时也叫单源最短路算法,其思想是——按路径长度递增的次序产生最短路的算法。
通俗来讲就是,找出从源点开始通过1条边可以到达的点的最小路径,2条边可以到达的点的最小路径,....,n-1条边可以到达的点的最小路径,将权值最小的点加入到集合S中,一直更新到终点位置,找到源点和终点的最小路径,将所有结点都加入到S中,结束算法。和Prim算法十分类似。
算法步骤如下:
a.找到一个源点s,更新源点和其他结点的距离(权值),如果不能直接到达就先赋值为无穷大,将源点加入到集合S。
b.更新从源点出发最多经过1条边就可以到达的点的最小权值,将权值最小的点加入到集合S,最多2条边就可以的点的最小权值,...,最多n-1条边就可以的点的最小权值,将权值最小的点加入到集合S。
c.把所有的结点都加入到集合S中,找到源点和终点的最短路径,结束算法。
【算法图示】
对于图G:
a.选择一个源点A,更新A到B,C,D,E的距离,将A加入到集合S中
b(1).更新从源点开始通过1条边就可以到达的点,找到其中的权值最小的点B,更新到各结点的权值,将B加入到集合S中
b(2).更新从源点开始最多通过2条边就可以到达的点ÿ