如何找到最短的路线来完成旅程?

问题描述

假设我们有一个无向图

{A,B} 5

{A,C} 6

{A,D} 3

{A,E} 4

{B,C} 4

{B,D} 3

{B,E} 6

{C,D} 3

{C,E} 5

{D,E} 5

其中数字代表重量。

假设我有兴趣从 A 出发,游览 B、C 和 E。我怎样才能找到最短的路线来进行这次旅行?没有目的地,我只想走最短距离的那三个顶点。我在堆的帮助下使用 Dijkstra 算法,由于没有最终目的地,我该如何修改算法来实现这一点。

解决方法

一种简单的方法,可能不是最有效的,但易于实施。

  1. 在您的示例中生成您要访问的节点的所有排列:
  • A -> B -> C -> E
  • A -> B -> E -> C
  • A -> C -> B -> E
  • A -> C -> E -> B
  • A -> E -> B -> C
  • A -> E -> C -> B
  1. 对于每个可能的序列,用 Dijkstra 计算路径
  • 例如对于 A B C E,路径 = dist(A,B) + dist(B,C) + dist(C,E)
  1. 选择计算出的最短路径

其他可能的方法,在这里,最后附上一个相对复杂度的对比表:

https://www.baeldung.com/cs/shortest-path-to-nodes-graph