📜  离散数学Dijkstra的算法

📅  最后修改于: 2020-12-23 01:01:06             🧑  作者: Mango

Dijkstra的算法:

该算法维护了一组顶点,这些顶点的最短路径是从源头开始的。该图由其成本邻接矩阵表示,其中成本是边缘的权重。在图的成本邻接矩阵中,所有对角线值均为零。如果没有从源顶点V s到任何其他顶点V i的路径,则用+∞表示。在此算法中,我们假设所有权重均为正。

  • 最初,集合中没有顶点。
  • 将源顶点V s包含在S中。确定从V s到所有其他顶点的所有路径,而无需经过任何其他顶点。
  • 现在,在最接近V s的S中包含该顶点,并找到通过该顶点到达所有顶点的最短路径并更新值。
  • 重复该步骤,直到图形中有n个顶点,直到S中不包含n-1个顶点。

完成此过程后,我们从源顶点获得了所有顶点的最短路径。

示例:使用Dijkstra算法在图所示的图中找到K和L之间的最短路径。

解:

步骤1:包括顶点K为S,并确定从K到所有其他顶点的所有直接路径,而不经过任何其他顶点。

到所有其他顶点的距离

S K a b c d L
K 0 4(K) 2(K) 20(K)

步骤2:在S中包含最接近K的顶点,并确定通过该顶点到所有顶点的最短路径并更新值。最接近的顶点是c。

到所有其他顶点的距离

S K a b c d L
K 0 3(K, c) 7(K, c) 2(K) 8(K, c) 18(K, c)

步骤3:最接近K的第二个顶点是9,包含在S中。

到所有其他顶点的距离

S K a b c d L
K 0 3(K, c) 7(K, c) 2(K) 7(K, c, a) 18(K, c)

步骤4:该顶点是最接近于K 3为b时,包含在S.

到所有其他顶点的距离

S K a b c d L
K 0 3(K, c) 7(K, c) 2(K) 7(K, c, a) 8(K, c, b)

步骤5: S中包含第二个最接近K的顶点d。

到所有其他顶点的距离

S K a b c d L
K(c, a, b, d) 0 3(K, c) 7(K, c) 2(K) 7(K, c, a) 8(K, c, b)

由于S中包含n-1个顶点。因此,我们找到了从K到所有其他顶点的最短距离。因此,K和L之间的最短距离为8,最短路径为K,c,b,L。