我试图获得无向加权图的最小生成树。但是,我需要找到一对或多对节点之间的最短路径。之后,我必须找到图的最小生成树。我已经找到了必要节点之间的最短路径,但我不知道如何找到包括这些最短路径的最小生成树。让我举个例子。
G
|2
H A
|1 |6
F ------B
|1 | 7
E -----D-----C
2 8
A和E之间也有2个重量的边缘,但我无法显示它。
现在,首先我需要找到A和E之间的最短路径(由于我的应用,我必须这样做),这是A-E-D-C,然后用最小跨度连接所有图形。有没有人帮我提一些线索?抱歉英语不好而不是我的母语
答案 0 :(得分:3)
只是一个MST
如果你只是想要MST,那只需要运行Kruskal's algorithm(见下文)或Prim's algorithm:
- 使用单个顶点初始化树,从图中任意选择。
- 通过一条边生长树:在将树连接到树中尚未到达的顶点的边缘中,找到最小权重边缘,并将其传递给树。
- 重复步骤2(直到所有顶点都在树中)。
醇>
这不涉及获取顶点之间的最短路径。实际上,它不一定包括一些最短的路径。考虑:
A
1 |\
B \
1 | \ 2
C \
1 | \
D-----E
1
A和E之间的最短路径是2(直接从A到E),但是MST(A-B-C-D-E)不包括该边缘。
'MST'包括一些最短路径
如果你想找到包含一些最短路径的MST,这是一个最有趣的问题。
这可以通过运行Kruskal算法进行微小变化来解决。
派生自Wikipedia: