在C ++中实现图形的最佳方法?

时间:2012-10-22 18:11:15

标签: c++ graph adjacency-list

我正在寻求实现一个恒定的,无序的,未加权的稀疏图(即边缘不移动)。但是,我将进行大量的顶点交换操作,从而改变顶点的顺序。

例如,一种方法是使用unordered_sets的向量+邻接列表结构:

0: 1 2 3
1: 0 2
2: 0 1
3: 0

交换0和3:

0: 3
1: 3 2
2: 3 1
3: 1 2 0

C ++中最好的实现是什么?

2 个答案:

答案 0 :(得分:3)

查看Boost Graph Library。它可能会满足您的需求,但如果没有,那么在您开始尝试自己创建之前,它的文档可能是了解该主题的良好起点。

编辑:如果您希望使用稀疏图形,adjacency list版本可能是您想要首先查看的实现。请注意,您可以通过更改用于实现它的基础数据结构(通过模板参数)来调整boost adjacency_list图的性能特征。

编辑:关于你正在描述的顶点交换,可能最简单的方法是设置一个顶点类型,顶点可以保留在原位,但其属性可以很容易地与另一个交换。 Bundled Properties机制是实现此目的的一种方式。

答案 1 :(得分:1)

或许

boost::graph

它有几个实现,您可以为每个顶点指定多个参数。进一步调查留给学生练习。