设G =(V,E)是加权,连通和无向图。描述一种有效的算法,决定G中是否有2个不同的MST。
我已经解决的上一个问题要容易得多: 描述一种有效的算法,用于确定G中是否只有一个MST。
这就是我解决后一个问题的方法:
我们运行Kruskal算法,然后将新MST的边缘涂成蓝色,其余边缘涂成红色。
然后我使用了另一个我们见过的简单算法(使用Kruskal),它在包含最大数量的红色边的图中找到MST - 这意味着它是图G中的MST而不管边缘'颜色,并且每个其他MST都不能包含比算法找到的MST更多的红色边缘。
现在只有一个MST,如果算法找到相同的MST(包含所有蓝色边缘)。
这里的另一个问题似乎要复杂得多。我已经尝试过使用上面描述的算法,并尝试使用其他各种技巧,但都没有效果。
顺便说一句,我听说有一种算法可以计算图表中不同MST的数量,但这实在是太过分了 - 我被要求提供一个简单的算法。
我将不胜感激, 感谢
答案 0 :(得分:0)
我可能会解开它但你的方法似乎不必要地复杂化。为了确定是否有2个不同的MST,我将首先运行Kruskal来获得第一个MST。然后你再次运行它,看看你是否可以避免从第一个MST中获得优势。
在Kruskal的每个步骤中,添加连接2个先前未连接的组件的最便宜的边缘。因此,您必须按重量对边缘进行排序并运行它们,如果它们连接2个未连接的组件,则将它们添加到MST。当有多个MST时,您将达到一个点,您可以选择相同重量的两条边连接相同的组件。
当您运行Kruskal一次后,您就会知道MST中有哪些边缘。如果再次运行它,您将再次按重量对边缘进行排序,并将最便宜的边缘(将2个未连接的组件连接)添加到图形中。但是,如果您可以选择添加连接相同组件的2条边,那么您可以获得第一次没有拍摄的边缘。最终结果将是一个不同的MST(不包含一个边缘),但是完全根据Kruskal的规则操作时有效的MST。
你基本上只是做Kruskal但是改变了相同重量的边缘的断路器。迭代该过程以找到更多不同的MST。如果你想知道是否只有2个MST,你应该尝试找到第三个MST。