我的程序首先创建一个图形(~1K-50K顶点),通常由几百个连接组件组成。
程序只需要能够操作和可视化各个组件(使用强制定向布局算法)。
能够进一步将每个连接的组件拆分成连接的子组件(通过删除边或顶点),这将是很好的(但不是必不可少的)。
所以我的问题是,我可以使用use子图或filtered_graph类模板来实现所需的功能(维护一组可以单独操作并可能通过删除边/顶点进一步细分的组件图)?或者还有另一种更好的方法吗?
如果这个问题太基础,我道歉。我刚刚开始学习BGL,但还不熟悉这个库。提前谢谢!
答案 0 :(得分:4)
使用connected_components
为每个组件分配一个唯一编号,并将其存储在property个节点中。然后,您可以在filtered_graph
谓词中使用该属性来确定给定组件是否属于当前活动图。顶点谓词将是直接的,而边缘谓词可以简单地查看任一端点以进行选择。子图的编号将存储在谓词对象中。
不同的方法是否会更好取决于您的用例。如果组件没有太大变化,并且您必须执行大量迭代所有节点的操作,那么使用单独的图形对象可能会更好。您可以将它们创建为如上所述构造的过滤图形的副本。如果图形被大量修改,那么一些不必扫描整个图形来更新连接组件的方法将是有用的。如果没有删除边缘,incremental_components
可能会解决问题。