可以使用 Prim 算法或 Kruskal 算法来找到一组顶点/节点和边/链接的最小生成树/图。不过,我想要的是一种算法,可以找到这个集合的最小跨度图,但结果图只需要包含任意选择的节点,而不是所有节点。如果结果图包含的节点多于所需的节点,那也没关系。
这样的算法存在吗?在修改图形以仅包含所需节点之后,也许可以只使用 Prim(或 Kruskal)算法?但是,我不确定如何在保持连接性的同时修改图表。
例如,假设我们有一个菱形的起始图(括号中的链接成本):
A
(2)/ \(1)
B C
(2)\ /(5)
D
现在,我们任意决定只需要节点 A 和 D。如果我们从 A 开始,我们仍然希望它走左边的路径,因为 ((2 + 2) < (1 + 5))。
假设我们稍微修改一下图表:
A
(2)/ \(1) (2)
B C ------E
(2)\ /(5)
D
如果我们决定只需要节点 A、D 和 E,我们就会意识到成本最小的路径不一定是链接最少的路径。取 A--B--D 和 A--C--E 花费 7,但 A--C--D 和 C--E 花费 8。