1

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

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

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

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

如果这个问题太基本,我很抱歉。我刚开始学习 BGL,对这个库还不满意。提前致谢!

4

1 回答 1

4

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

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

于 2013-05-06T23:46:02.797 回答