最短路径之Dijkstra算法

Dijstra算法的基础操作是边的拓展:如果存在一条从u到v的边,那么从s到u的最短路径可以通过将边(u,v)添加到尾部来拓展一条从s到v的路径。这条路径的长度是d[u]+w(u,v)。如果这个值比目前已知的d[v]的值要小,我们可以用新值来替代当前d[v]中的值。拓展边的操作一直执行到所有的d[v]都代表从s到v最短路径的花费。这个算法经过组织因而当d[u]达到它最终的值的时候没条边(u,v)都只被拓展一次。

Dijkstra算法图示:

最短路径之Dijkstra算法_第1张图片


最短路径之Dijkstra算法_第2张图片


最短路径之Dijkstra算法_第3张图片


最短路径之Dijkstra算法_第4张图片


最短路径之Dijkstra算法_第5张图片


最短路径之Dijkstra算法_第6张图片


最短路径之Dijkstra算法_第7张图片


最短路径之Dijkstra算法_第8张图片


最短路径之Dijkstra算法_第9张图片


最短路径之Dijkstra算法_第10张图片


最短路径之Dijkstra算法_第11张图片


最短路径之Dijkstra算法_第12张图片

_________________________________________________________________________________________________________

维基百科上的动态演示图:

最短路径之Dijkstra算法_第13张图片


———————————————————————————————————————————

2.3  Dijkstra算法具体步骤  

(1)初始时,S只包含源点,即S=,v的距离为0。U包含除v外的其他顶点,U中顶点u距离为边上的权(若v与u有边)或 )(若u不是v的出边邻接点)。

(2)从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。

(3)以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u(u U)的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。

(4)重复步骤(2)和(3)直到所有顶点都包含在S中。

2.4  Dijkstra算法举例说明

如下图,设A为源点,求A到其他各顶点(B、C、D、E、F)的最短路径。线上所标注为相邻线段之间的距离,即权值。(注:此图为随意所画,其相邻顶点间的距离与图中的目视长度不能一一对等)

图一:Dijkstra无向图

 最短路径之Dijkstra算法_第14张图片

算法执行步骤如下表:【注:图片要是看不到请到“相册--日志相册”中,名为“Dijkstra算法过程”的图就是了】

最短路径之Dijkstra算法_第15张图片




你可能感兴趣的:(算法,最短路径,dijkstra,迪科斯彻算法)