我的程序通过创建一个图表(〜1K-50K顶点),通常由几百个连接部件的开出。
程序只需要能够操纵和(使用力指向布局算法)可视化各个组件。
这将(通过消除边缘或顶点)是巨大的(但不是必需的),有进一步分裂的能力,各连接部件插入连接子。
所以我的问题是,我可以用使用子或filtered_graph类模板来实现所需的功能(维护可以通过删除边/顶点被单独操纵,并可能进一步细分组件图形的集合)? 还是有一个又一个,更好的方法?
我很抱歉,如果这个问题太基础。 我刚开始学BGL,而不是与此库舒适又不失。 提前致谢!
使用connected_components
到一个唯一的编号分配给每个部件,其存储在属性节点。 然后你可以使用该属性在filtered_graph
谓词来决定给定的组件是否属于当前活动的图形或没有。 顶点谓词是直接的,而边缘谓词可以简单地看一下两个端点做出自己的选择。 子图的数量将被存储于断言对象本身。
无论是采用不同的方法将尤为明显取决于你的使用情况。 如果组件不发生大的变化,你必须执行大量其中遍历所有的节点,然后有单独的图形对象可能会更好操作。 如上文所述的构造过滤图的副本,您可以创建它们。 如果图形被修改了很多,有些办法,将不必扫描整个图形更新连接的组件将是有益的。 如果没有边缘得到去除, incremental_components
可能做的伎俩。