And*_*bel 13
考虑这种情况:
------100----
| |
A--1--B--3--C
| |
| 3
| |
2-----D
Run Code Online (Sandbox Code Playgroud)
MST由ABDC(成本6)组成.第二个最低成本是ABCD(成本7).如果删除最低成本边缘,则会获得ACBD(成本105).
所以你的想法不会奏效.虽然我没有更好的想法......
IVl*_*lad 13
你可以在O(V 2)中完成.首先使用Prim算法计算MST (可以在O(V 2)中完成).
计算max[u, v] = the cost of the maximum cost edge on the (unique) path from u to v in the MST.可以在O(V 2)中完成.
找到一个(u, v)不属于最小化的MST 的边缘abs(max[u, v] - weight(u, v)).可以在O(E)== O(V 2)中完成.
返回MST' = MST - {the edge that has max[u, v] weight} + {(u, v)},这将给你第二好的MST.
您可以这样做——尝试从图中一次删除一个 MST 的边,然后运行 MST,从中获取最小值。所以这与你的相似,除了迭代: