将升压图分割成相互连接的组件
splitting a boost graph into connected components
我的程序首先创建一个图(约1K-50K个顶点),通常由几百个连接的组件组成。
程序只需要能够操作和可视化单个组件(使用强制定向布局算法)。
如果能够进一步将每个连接的组件拆分为连接的子组件(通过移除边缘或顶点),那将是很棒的(但不是必需的)。
所以我的问题是,我可以使用使用子图或filtered_graph类模板来实现所需的功能(维护一个组件图的集合,可以单独操作,并可能通过删除边/顶点进一步细分)?还是有其他更好的方法?
如果这个问题太基础,我很抱歉。我刚刚开始学习BGL,对这个库还不太熟悉。提前感谢!使用connected_components
为每个组件分配唯一的编号,并将其存储在节点的属性中。然后,您可以在filtered_graph
谓词中使用该属性来确定给定组件是否属于当前活动的图。顶点谓词将是直接的,而边缘谓词可以简单地查看任意一个端点来做出选择。子图的编号将存储在谓词对象本身中。
不同的方法是否会更好取决于您的用例。如果组件变化不大,而您必须执行许多遍历所有节点的操作,那么使用单独的图形对象可能会更好。您可以将它们创建为如上所述构造的过滤图的副本。如果图被修改了很多,一些不需要扫描整个图来更新连接组件的方法将是有用的。如果没有边缘被删除,incremental_components
可能会成功。
相关文章:
- 到连接组件算法的问题(递归)
- 使用 bfs 解决连接组件问题时得到错误的答案
- 将无向连接图分解为两个组件
- 连接的组件程序产生不正确的输出
- 查找每个连接组件区域的邻域
- 根据现有的标签(而不是二进制图像)查找使用 OpenCV 连接的组件
- 如何在OpenCV中对连接组件进行分割
- OpenCV 3.4.0 中带有 cuda 的连接组件(在 GPU 上)
- 在一个DFS中查找Di-Graph中的强烈连接组件
- OpenCV 中的连接组件
- 使用带有笛卡尔点的升压连接组件
- C++ 中无向图中的连接组件
- 用于 SPOJ 底部的强连接组件
- OpenCV如何在二进制图像中查找连接组件的列表
- 连接组件算法输出
- 定义强连接组件
- C++-如何增加堆栈大小以允许Kosaraju算法进行更多递归以计算强连接组件
- DFS:如何在c++中表示连接组件的节点
- 带有STL c++ bug的强连接组件
- 图形连接和连接组件