将图分解为2节点或更大的最小子组件

时间:2019-03-26 18:23:58

标签: r igraph

我希望能够将图形分为子组件,以便删除任何单个节点都不会创建其他子组件(不包括单个节点)。作为示例,请参见下面的两个图像。

第一张图片显示了完整的图形。第二张图像显示了已被拆分为最小可能子组件的图形的子组件。从第二张图像可以看出,顶点名称已得到维护。我不需要新结构成为单个图形,它可以是图形列表,甚至每个组件中节点的列表。

enter image description here

保留节点4-5-6的组件,因为删除这三个节点中的任何一个都不会创建新的组件,因为断开的节点将仅仅是一个节点。 enter image description here

此刻,我正在尝试进行一个迭代过程,该过程以升序顺序依次删除节点,然后递归到生成的新组件中。但是,这很困难,我想其他人以前会做得更好。

1 个答案:

答案 0 :(得分:2)

您说您想要“ 2个节点中的最小子组件”,而您的示例具有“最小可能子组件”。但是,实际上,您所指的是可能的最大子组件,因此删除任何单个节点都不会再创建其他子组件,对吗?否则,您可以将图形分为所有2个图形的集合。

那么,我认为您的问题可以描述为找到所有“双向连接的组件”(又称图形的最大双向连接的子图):https://en.wikipedia.org/wiki/Biconnected_component

正如您在评论中所说,igraph具有功能biconnected_components(g),它将解决您的问题。 :)