查找图表中的所有边,如果删除,将断开一对顶点

时间:2017-03-03 00:41:52

标签: algorithm graph-algorithm graph-theory

我有一个无向图G(V,E)。我试图解决的问题分为两部分:

第1部分:给定图形和图形中的一对顶点,找到包含在这对节点之间的所有路径中的边。

第2部分:给定图形,找到所有这样的边,使得每个边沿图中任意两个顶点之间的所有路径存在。

第2部分的示例: 让图表有节点{a, b, c, d, e, f, g}. 设边是:

{a, b},
{b, c},
{c, a},
{c, d},
{d, e},
{e, f}
{f, g},
{g, e}

对于此图,{c,d}和{d,e}应为返回的边。

你怎么能有效地做到这一点?

2 个答案:

答案 0 :(得分:1)

如果边E位于从顶点A到顶点B的路径上,但是也存在从A到B的不包含E的路径,那么E就处于循环中。

如果E处于一个循环中,并且E位于从A到B的路径上,那么从循环中的A到B之间通过其他边缘的路径不包括E.

因此,您在第2部分中寻找的边是不在循环中的边,这些边也在从A到B的路径上。

回答你的问题:

1)使用Hopcroft / Tarjan算法查找图中所有双连通分量(周期)。见https://en.wikipedia.org/wiki/Biconnected_component

2)将每个双连通分量折叠到一个顶点(更准确地说,组合由循环中的边连接的任何2个顶点,直到用完这些边)。这将创建对应于块切割树的(也在上面的链接中描述)。包含A的组件在新图中将为A,对于B也是如此。

3)由于结果图是一棵树,它只有从A到B的一条路径。用DFS找到它。该路径上的边缘是第2部分的答案。

4)(3)的边缘以及与这些边缘相邻的每个双连通分量的边缘都是第1部分的答案。

是的,听起来有点像@ EmmanuelAC的回答是试图指出这个方向。

答案 1 :(得分:0)

有一种算法可以找到“桥梁”,如果我们删除它,我们称桥为边缘,图形分为两个不相交的图形。你正在寻找的边缘是桥梁。 How can I find bridges in an undirected graph?

第1部分。既然你知道什么是桥梁,你只需要在这对节点之间找到一条路径,并且该路径中所有也是桥梁的顶点都是第1部分的解决方案。

第2部分。解决方案是图中的所有桥梁