我目前正在研究 C++ 中的有向图数据结构(此项目没有 Boost GL)。主要应用程序将识别连接的组件和接收器。这些图预计是稀疏的(E ~ 4V 上 num 边的上限)并且都是统一的权重。我正在尝试在邻接列表、关联列表或其他一些我还没有听说过的表示之间做出决定(adj. matrix 不是稀疏的选项 bc)。瓶颈可能是整体空间和图初始化的速度:图将从潜在的巨大数组初始化,这样数组中的每个元素最终都会成为一个顶点,其有向边指向其相邻元素之一。要获得每个顶点的边,必须首先比较其所有相邻元素。
我的问题是:(1)哪种表示通常初始化更快,并且 BFS 遍历也很快,(2)有哪些算法(除了普通 BFS)可以找到连接的组件?我知道使用 BFS 是 O(V+E)(我认为这是最佳的),但我担心中间队列的大小,因为图形宽度随高度呈指数增长。
对图形实现没有太多经验,因此我将不胜感激任何建议。