将升压图分割成相互连接的组件

splitting a boost graph into connected components

本文关键字:连接 组件 分割      更新时间:2023-10-16

我的程序首先创建一个图(约1K-50K个顶点),通常由几百个连接的组件组成。

程序只需要能够操作和可视化单个组件(使用强制定向布局算法)。

如果能够进一步将每个连接的组件拆分为连接的子组件(通过移除边缘或顶点),那将是很棒的(但不是必需的)。

所以我的问题是,我可以使用使用子图或filtered_graph类模板来实现所需的功能(维护一个组件图的集合,可以单独操作,并可能通过删除边/顶点进一步细分)?还是有其他更好的方法?

如果这个问题太基础,我很抱歉。我刚刚开始学习BGL,对这个库还不太熟悉。提前感谢!

使用connected_components为每个组件分配唯一的编号,并将其存储在节点的属性中。然后,您可以在filtered_graph谓词中使用该属性来确定给定组件是否属于当前活动的图。顶点谓词将是直接的,而边缘谓词可以简单地查看任意一个端点来做出选择。子图的编号将存储在谓词对象本身中。

不同的方法是否会更好取决于您的用例。如果组件变化不大,而您必须执行许多遍历所有节点的操作,那么使用单独的图形对象可能会更好。您可以将它们创建为如上所述构造的过滤图的副本。如果图被修改了很多,一些不需要扫描整个图来更新连接组件的方法将是有用的。如果没有边缘被删除,incremental_components可能会成功。