我正在尝试用图解决相当复杂的问题,即我们给出了 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个边。这是一个小数字,所以我们可以通过一些优化来运行回溯算法来解决这个问题。
我仍然没有对回溯进行编码,因为我不确定它是否会起作用,请写下您的想法。提前谢谢。