私は現在、C ++の有向グラフデータ構造に取り組んでいます(このプロジェクトにはBoost GLはありません)。主なアプリケーションは、接続されたコンポーネントとシンクを識別することです。グラフはまばらであると予想され(E〜4Vのnumエッジの上限)、すべて均一な重みになります。私は、隣接リスト、発生率リスト、またはおそらくまだ聞いたことがない他の表現のいずれかを決定しようとしています(余因子行列はスパース性のオプションbcではありません)。ボトルネックは、全体的なスペースとグラフの初期化の速度である可能性があります。グラフは、潜在的に巨大な配列から初期化されるため、配列内の各要素は、隣接する要素の1つに向けられたエッジを持つ頂点になります。各頂点のエッジを取得するには、その隣接するすべての要素を最初に比較する必要があります。
私の質問は次のとおりです。(1)通常、初期化が高速で、BFSトラバーサルも高速な表現、(2)連結成分を見つけるためのアルゴリズム(バニラBFS以外)はありますか?BFSを使用したO(V + E)であることは知っていますが(これが最適だと思います)、グラフの幅が高さとともに指数関数的に増加するため、中間キューのサイズが心配です。
グラフの実装についてはあまり経験がないので、何か提案をいただければ幸いです。