无向图求最短路径——Dijkstra(迪杰斯特拉算法)

    Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个顶点到其他所有顶点的最短路径。

   问题描述: 如下无向图, 若从顶点1开始计算到其余各顶点的最短路径

    无向图求最短路径——Dijkstra(迪杰斯特拉算法)_第1张图片

 

 首先需要3个辅助数组:  

  • dist[] : 记录从顶点1开始到其余各顶点的最短路径
  • visited[] : 记录该顶点是否被访问过, 初始值设为0
  • path[] : 记录该顶点最短路径的前驱顶点

  求最短路径步骤:

    ①初始化数组:计算从顶点0到其余各顶点的路径长度
 

顶点 1 2 3 4 5 6 7
dist[] 0 12 16 14
path[] -1 1 -1 -1 -1 1 1
visited[] 1 0 0 0 0 0 0

 

   ②由于dist数组中目前最小值为顶点2,计算从顶点2到其余各顶点的距离, 若小于当前dist数组中的值, 则更新dist和path数组;若大于当前dist数组的值, 则不做改变

顶点 1 2 3 4 5 6 7
dist[] 0 12 22 16 14
path[] -1 1 2 -1 -1 1 1
visited[] 1 1 0 0 0 0 0

     ③选择dist数组中未被访问过的最小值顶点7, 同上

顶点 1 2 3 4 5 6 7
dist[] 0 12 22 22 16 14
path[] -1 1 2 -1 7 1 1
visited[] 1 1 0 0 0 0 1

 

   ④选择dist数组中未被访问过的最小值顶点6

顶点 1 2 3 4 5 6 7
dist[] 0 12 22 18 16 14
path[] -1 1 2 -1 6 1 1
visited[] 1 1 0 0 0 1 1

 

   ⑤选择dist数组中未被访问过的最小值顶点5

顶点 1 2 3 4 5 6 7
dist[] 0 12 22 22 18 16 14
path[] -1 1 2 5 6 1 1
visited[] 1 1 0 0 1 1 1

 

   ⑥选择dist数组中未被访问过的最小值顶点3或者4都可以,  如选择3

顶点 1 2 3 4 5 6 7
dist[] 0 12 22 22 18 16 14
path[] -1 1 2 5 6 1 1
visited[] 1 1 1 0 1 1 1


   ⑦选择dist数组最后一个顶点4

顶点 1 2 3 4 5 6 7
dist[] 0 12 22 22 18 16 14
path[] -1 1 2 5 6 1 1
visited[] 1 1 1 1 1 1 1

 

到这里为止, visited数组元素全为1, 即所有顶点都被访问过, 最短路径见如上图。

你可能感兴趣的:(算法,算法)