图 实验七 采用Dijkstra算法求带权有向图的最短路径

Posted sunbines

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图 实验七 采用Dijkstra算法求带权有向图的最短路径相关的知识,希望对你有一定的参考价值。

 

Dijkstra算法图解

技术分享图片

说明:
初始化S = { 0 }, U = { 1, 2, 3, 4, 5, 6 },  dist[ ] = { 0, 4, 6, 6, ∞, ∞ }, path[ ] = { 0, 0, 0, 0, -1, -1, -1 }
第一步:从U中找到最小的顶点1,将它添加到S中,S ={ 0, 1 }, 考查顶点1, 发现顶点1到顶点2和4有边:
dist[ 2 ] = MIN{dist[ 2 ], dist[ 1 ] +1 } = 5(修改)
dist[ 4 ] = MIN{dist[ 4 ], dist[ 1 ] +7 } = 11(修改)
则S ={ 0, 1 },dist[ ] = { 0, 4, 5, 6, 11, ∞ },path[ ] = { 0, 0, 1, 0, 1, -1, -1 }.

第二步:从U中找到最小的顶点2,将它添加到S中,S ={ 0, 1,2 }, 考查顶点2, 发现顶点2到顶点4和5有边:
dist[ 4 ] = MIN{dist[ 2 ], dist[ 2 ] +6 } = 11
dist[ 5 ] = MIN{dist[ 4 ], dist[ 2 ] +4 } = 9(修改)
则S ={ 0, 1,2 },dist[ ] = { 0, 4, 5, 6, 119 },path[ ] = { 0, 0, 1, 0, 1, 2, -1 }.

第三步:从U中找到最小的顶点3,将它添加到S中,S ={ 0, 1,2, 3 }, 考查顶点3, 发现顶点3到顶点2和5有边, 由于顶点2已经考察过,不进行修改:
dist[ 5 ] = MIN{dist[ 5 ], dist[ 3 ] +5 } = 9
则S ={ 0, 1,2, 3},dist[ ] = { 0, 4, 5, 6, 9, ∞ },path[ ] = { 0, 0, 1, 0, 1, 2, -1 }.

第四步:从U中找到最小的顶点5,将它添加到S中,S ={ 0, 1,2, 3, 5 }, 考查顶点5, 发现顶点3到顶点4和6有边:
dist[ 4 ] = MIN{dist[ 4 ], dist[ 5 ] +1 } = 10(修改)
dist[ 6 ] = MIN{dist[ 6 ], dist[ 5 ] +8 } = 11(修改)
则S ={ 0, 1,2, 3, 5},dist[ ] = { 0, 4, 5, 5, 9, ∞ },path[ ] = { 0, 0, 1, 0, 5, 2, 5 }.

 

以上是关于图 实验七 采用Dijkstra算法求带权有向图的最短路径的主要内容,如果未能解决你的问题,请参考以下文章

单源点最短路径的Dijkstra算法

数据结构与算法系列研究七——图prim算法dijkstra算法

KM(Kuhn-Munkres)算法求带权二分图的最佳匹配

有向网络(带权的有向图)的最短路径Dijkstra算法

用C++求dijkstra算法求最短路径

C++ 实现带权有向图的单源点最短路径Dijkstra算法(完整代码)