【问题标题】:splitting a boost graph into connected components将升压图拆分为连通分量
【发布时间】:2013-05-06 21:44:26
【问题描述】:

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

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

如果能够将每个连接的组件进一步拆分为连接的子组件(通过删除边或顶点),那就太好了(但不是必须的)。

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

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

【问题讨论】:

    标签: c++ boost graph


    【解决方案1】:

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

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

    【讨论】:

    • 您能否发布一个示例,说明如何将此类属性附加到连接组件中的顶点?我迷路了。
    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多