Bil*_*ham 5 c++ graph data-structures
我计划在C++中表示一个相当大,稀疏,无向图形结构.这将是10,000多个顶点的量级,每个顶点具有大约10的度数.
我已经阅读了一些关于将图表表示为邻接矩阵或列表的背景,但是它们中的较近似乎适合我想要做的事情.在我的场景中:
这是最后一点,使邻接矩阵看起来不合适.据我所知,每个查询都需要2*N个操作,其中N是图中的节点数.
我相信邻接列表会减少所需的操作,但似乎不合适,因为我在每个边缘包含的参数 - 即因为邻接列表存储每个
有没有更好的方法来存储我的数据,以便这些查询操作更快,我可以存储每个边缘及其参数?我不想开始实现一些不正确的方法.
在这里,我没有看到通常的面向对象方法的问题.您的Edge<V,E>和Vertex<V,E>类型在哪里V是顶点存储的内容,E是边存储的内容.每个边都有两个对其各自顶点的引用和两个索引,它们表示在相应顶点的哪个槽中查找该边:
template <typename V, typename E>
class Edge {
struct Incidence {
size_t index;
Vertex<V,E>& v;
};
std::array<Incidence,2> vertices;
E content;
};
template <typename V, typename E>
class Vertex {
std::vector<Edge<V,E>*> edges;
};
Run Code Online (Sandbox Code Playgroud)
如果移除边缘e,则Vertex<V,E>::edges移动back到前一个位置的位置e.恒定时间删除.用于枚举特定边的所有相邻边的线性时间(在操作结果的大小中).听起来不错.