我正在寻求实现一个恒定的,无序的,未加权的稀疏图(即边缘不移动)。但是,我将进行大量的顶点交换操作,从而改变顶点的顺序。
例如,一种方法是使用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 ++中最好的实现是什么?
答案 0 :(得分:3)
查看Boost Graph Library。它可能会满足您的需求,但如果没有,那么在您开始尝试自己创建之前,它的文档可能是了解该主题的良好起点。
编辑:如果您希望使用稀疏图形,adjacency list版本可能是您想要首先查看的实现。请注意,您可以通过更改用于实现它的基础数据结构(通过模板参数)来调整boost adjacency_list图的性能特征。
编辑:关于你正在描述的顶点交换,可能最简单的方法是设置一个顶点类型,顶点可以保留在原位,但其属性可以很容易地与另一个交换。 Bundled Properties机制是实现此目的的一种方式。
答案 1 :(得分:1)
它有几个实现,您可以为每个顶点指定多个参数。进一步调查留给学生练习。