【发布时间】:2019-01-03 16:52:55
【问题描述】:
给定一个 G(V,E) 加权(在边上)图,我需要找到属于每个 MST 的边数以及属于至少一个但不是全部的边数和那些不属于任何人。
图表以以下形式作为输入(示例):
3 3
1 2 1
1 3 1
2 3 2
前 3 是节点数,后 3 是边数。以下三行是边,第一个数字是它们的起点,第二个是它们的终点,第三个是值。
我曾考虑过运行 kruskal 一次以找到一个 MST,然后对于属于 G 的每个边检入(线性?)时间是否可以在不改变其整体重量的情况下替换此 MST 中的一条边。如果可以t 它不属于任何。如果它可以属于一个但不是全部。我还可以在第一个 MST 中标记边缘(可能带有第二个值 1 或 0),最后检查其中有多少不能被替换.这些是属于每个可能的 MST 的。这个算法可能是 O(V^2),我不太确定如何用 C++ 编写它。我的问题是,我们能以某种方式降低它的复杂性吗?如果我向 MST 添加一条边,我如何检查(并在 C++ 中实现)形成的循环是否包含一个重量较小的边?
【问题讨论】: