在图中查找两个最小生成树,使其总和最小

时间:2017-07-18 16:35:49

标签: algorithm graph minimum-spanning-tree

我正在尝试用图解决相当复杂的问题,即我们给出了 N N <= 10 )节点和 M的无向图 M <= 25 )边缘。

假设我们有两组边A和B,我们在A和B中都不能有两条相同的边,也可能有任何边不能使用的边,每条边都赋值它。我们希望最小化两棵树的总和。

请注意,在A组和B组中,边缘应与所有N个节点形成连接图。

示例

N = 2,M = 3

边缘:1 - 2,值= 10,1 - 2,值:20,2 - 1,值30,我们要返回结果30,在集合A中我们取第一条边并在集合B中第二个优势。

N = 5 M = 8

边缘:{  (1,2,10),  (1,3,10),  (1,4,10),  (1,4,20),  (1,5,20),  (2,3,20),  (3,4,20),  (4,5,30), }

集A包含边{(1,2,10),(1,3,10),(1,4,10),(1,5,20)}

而B组包含{(1,4,20),(2,3,20),(3,4,20),(4,5,30)}

我尝试了什么

首先我编写了贪婪的解决方案,我首先生成了第一个最小生成树,然后我用其他边生成了第二个生成树,但是在某些测试用例中它失败了。所以我开始考虑这个解决方案:

我们可以看到我们想要将边缘分成两组,我们也可以看到在每个组中我们希望有N - 1条边以确保图形不包含不需要的边,现在我们看到在更糟糕的情况下,我们将使用(N-1)+(N-1)个边,即18个边。这是一个小数字,所以我们可以通过一些优化来运行回溯算法来解决这个问题。

我仍然没有对回溯进行编码,因为我不确定它是否会起作用,请写下您的想法。提前谢谢。

0 个答案:

没有答案