码迷,mamicode.com
首页 > 编程语言 > 详细

最短路径之Dijkstra算法

时间:2018-04-15 13:38:14      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:center   src   思想   []   alt   顶点   sof   ali   就是   

  Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。

  一、算法思想

  令G = (V,E)为一个带权有向网,把图中的顶点集合V分成两组:已求出最短路径的顶点集合S(初始时S中只有源节点,以后每求得一条最短路径,就将它对应的顶点加入到集合S中,直到全部顶点都加入到S中);未确定最短路径的顶点集合U-(V-S)。在加入过程中,总保持从源节点v到S中各顶点的最短路径长度不大于从源节点v到V-S中任何顶点的最短路径长度。

  二、算法描述

  (1)S为已经找到的从v出发的最短路径的终点集合,它的初始状态为空集

  技术分享图片

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

  技术分享图片

  (3)以u为新考虑的中间点,修改U中各顶点j的最短路径长度:若从源点v到顶点j(j∈U)的最短路径长度(经过顶点u)比原来最短路径长度(不经过顶点u)短,则修改顶点j的最短路径长度

  技术分享图片

  技术分享图片

    顶点v到j的最短路径=MIN(Cvk+Wkj,Cvj)

 

技术分享图片

具体执行步骤如下图所示:

S                                                                 U                                                                         

DIST[]

{A,  B,  C,  D,  E,  F  }                                              

PATH[]      

{A,  B,  C,  D,  E,  F  }                                                         

{A} {B,  C,  D,  E,  F} {0,  6,  3,  ∞,  ∞,  ∞} {A,  A,  A,  -1,  -1,  -1}
{A, B, C} {D,  E,  F  } {0,  6,  3,  6,  7,   ∞} {A,  A,  A,  C,  C,  -1}
{A,B,C,D,E} {F} {0,  6,  3,  6,  7,  9} {A,  A,  A,  C,  C,  D}
{A,B,C,D,E,F} {0} {0,  6,  3,  6,  7,  9} {A,  A,  A,  C,  C,  D}
       
       
       

 

最短路径之Dijkstra算法

标签:center   src   思想   []   alt   顶点   sof   ali   就是   

原文地址:https://www.cnblogs.com/jiliangqian/p/8846797.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!