我正在阅读BOOST库,发现他们有一个算法来查找图中的桥,他们确实有一个找到关节点。无论如何,这可以有效地完成?在图C++(BOOST)中查找桥梁?
我有一个想法:
使用升压找到铰接点
2.使用out_edges,找到所有边缘连接的每个关节点
3.删除它们并计算连接组件上的数量(我假设我的图形最初是完全连接的),如果它超过1,我添加这边缘的桥梁。
问题:桥梁是否需要连接到关节点?我只是假设他们是,找不到任何网络。
我也想知道如何解决这个问题。
我的另一种方法会更天真,并采取O(V *(V + E)),这是非常糟糕的。
林一点不清楚,所以你说我只需要检查边缘的整个末端都是关节点? – LoveMeow 2014-11-24 13:49:50
@LoveMeow:尝试使用具有两个节点和一个边的平凡图。如果Boost将两个节点都算作关节节点,那么是的。如果Boost不把它们算作关节节点,那么你需要对图进行预处理(但效率更高)。迭代地,枚举所有单连接的节点,将它们的单边标记为桥,删除该边并再次检查。 (这反复修剪线性链,其中所有的边缘都是桥梁) – MSalters 2014-11-24 14:00:52
我检查了,boost并没有在关节点上对它们进行计数!所以我需要枚举所有连接到一个边的节点,并将它们标记为桥,除了两个关节点之间的那些节点? – LoveMeow 2014-11-24 14:13:39