在图中找到所有边缘,如果删除,将断开一对顶点



i具有无向图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}应该是返回的边缘。

您如何有效地进行?

如果边缘E位于从顶点a到顶点B的路径上,但是还有一个从A到B的路径不包括E,则E在一个周期中。

如果E处于周期,并且E处于从A到B的路径上,则在循环中从A到B到B的路径不包括E。

因此,您在第2部分中寻找的边缘是不在A到B。

的循环中的边缘。

然后回答您的问题:

1)使用Hopcroft/Tarjan算法在图中找到所有双连接组件(周期)。请参阅https://en.wikipedia.org/wiki/biconnected_component

2)将每个双连接组件折叠到一个一个顶点(更确切地说,将通过循环中的边缘连接的任何2个顶点组合在一起,直到您用完此类边缘为止)。这将创建与块切割树相对应的A tree (在上面的链接中也描述)。包含a的组件将是新图中的a,类似于b。

3)由于所得的图是一棵树,因此它将仅具有一个从A到B的一个路径。使用DFS找到它。该路径上的边缘是第2部分的答案。

4)(3)的边缘以及与这些边缘相邻的每个双连接组件中的边缘,是第1部分的答案。

是的,听起来有点像 @Emmanuelac的答案试图指向这个方向。

有一个算法要查找"桥梁",如果删除图形,我们将桥梁称为边缘。您正在寻找的边缘是桥梁。我如何在无向图中找到桥梁?

第1部分。现在您知道了什么是桥梁,您只需要在这对节点和该路径中的所有顶点之间找到一条路径,而桥也是第1部分的解决方案。

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

最新更新