最小化图中的桥数

时间:2015-04-11 21:30:35

标签: java c++ algorithm graph bridge

我试图解决一个基本上减少的问题:
给出一组 N 节点,编​​号从1到N和 M 边缘,其中 N <10000 M <100000
找到边缘(u,v),当添加到图表中时,最大限度地减少图表中的桥梁数量
如果有有很多这样的边缘 - 打印具有最低词典值的那个。
这个问题的高效方法是什么?

1 个答案:

答案 0 :(得分:8)

我相信这个问题很难。这里将概述我能想到的解决方案:

1)查找图中的所有桥梁。

2)现在想象桥梁是图中唯一的边缘。您只保留网桥并加入大节点中网桥之间的所有节点。

3)你现在有了一棵树。边缘是桥梁,节点是大节点&#34;结合上一个图表中的节点。

4)让我们调用这个森林图T。

5)连接图T中的任意两个节点,创建一个循环。循环中的任何边缘都不是桥梁。

6)第5点意味着通过创建尽可能长的循环来找到解决方案。您只需找到两个距离最长的节点就可以做到这一点。

7)您可以在图表中找到距离最远的节点。这里讨论的内容如下: A linear-time algorithm for finding the longest distance between two nodes in a free tree?

如果有任何意见需要进一步解释,请告诉我。