具有一些公共边的两个图上的最小生成树



给定两个具有加权边的完整图,我想在这两个图上分别找到两个最小生成树(MST),条件是两个学习的MST在给定的边子集上具有公共边。请注意,这两个图具有相同数量的顶点,但边权重都不同。

例如,如果这两个图是具有顶点{1,…,d}的完全边加权图。我们要求两个学习的MST在具有顶点{1,……,d/2}的完全子图上具有相同的边。

我可以使用什么算法来查找这样的MST?我尝试使用Kruskal算法的修改,但没能使其工作。

不确定我是否遇到了问题,因为描述中缺少一些重要的细节
无论如何,这里有一种可能的方法,在给定的限制条件下,它是值得称赞的。

只要两个图有相同数量的边,并且你可以将这些图表示为边列表,MRT算法就可以用来找到它们所有的公共生成树
它通常被称为两图通用生成树算法,在Mint、Read和Tarjan的一篇学术文章中有描述
请注意,Boost图库已经包含了一个正确的实现。

一旦找到了这些树,就可以对它们进行迭代,以删除那些不是它们各自图的最小生成树的树。请注意,如果您删除第一个图的第i个公共生成树,您还应该删除第二个图的第i个后,如果集合不为空,您可以删除所有不包含作为问题一部分的给定边子集的树(我不完全理解您所说的边在两个图中是公共的是什么意思,但如果它是一个约束,您可以在结果集上强制执行它)
剩下的树就是你要找的。

如果两个图的边数不相同,可以向较小的图添加假节点和边
换句话说,创建一个伪节点nf-i,并添加一个边nf-i->n-i。给边一个零权重
在该过程结束时,您可以轻松地移除这些节点和边,并返回原始生成树。

最新更新