我目前正在使用C ++编写有向图数据结构(此项目中不使用Boost GL)。主要应用将是识别连接组件和汇点。预计图形稀疏(E〜4V上限的边数),并且所有图形的权重都将是均匀的。我正尝试在邻接表、关联表之间进行选择,或者可能是一些我还没听说过的其他表示方法(邻接矩阵由于稀疏性不是选项)。瓶颈可能将是整体空间和图形初始化速度:图形将从可能巨大的数组初始化,以使数组中的每个元素最终成为具有指向其相邻元素之一的有向边的顶点。为了获取每个顶点的边缘,必须首先比较其所有相邻元素。
我的问题是:(1)通常哪种表示法初始化速度更快,同时对BFS遍历也很快? (2)除了普通BFS外,还有哪些算法可以用于查找连接的组件?我知道使用BFS是O(V + E)(我认为是最优的),但我担心中间队列的大小会随着高度呈指数增长而变得过大。
我没有太多与图实现方面的经验,所以我会感激任何建议。