今日では、クラスZimo_Leeが言ったとき、彼は......図を構築する方法を忘れてしまった間、彼に笑ってエッセイを書いて、だけでなく、自分のアイデアを整理します。
まず地図上VisuAlgo(とてもおいしい)を投稿:
これは、持っているスタートの周りにそれを説明する資格チャートです。グラフは無向である場合は、逆を構築することができたときに、エッジの各辺上に構築されました。
まず、隣接行列
[j]は現在のデータxがグラフ[i]は、エッジが存在する場合原理は、単純で表し、Xは右である、点I jを。コードも説明する必要はありません。
グラフ[ 100 ] [ 100 ]。 ボイド add_edge(INT から、INTに、int型の値){ [グラフから ] [する] = 値。 }
隣接行列はよく理解され、コードは非常に簡単であり、いくつかのケースで横断することは非常に容易であろう。短所も、明白であるあなたは、不要な多くのスペースを必要とするとき、比較的まばらな描画するとき、それは宇宙の偉大な廃棄物が発生します。
第二に、隣接リスト
辺が同じポイント発行配列に存在します。比較的隣接行列の省スペースよりも、話す、だけでなく、簡単にすべての辺が同じポイントを発行したトラバースすることができます。
ニーズの動的配列のために、私は、各ノードを格納するために使用されるベクターを用います。
グラフ[I] [CNT] =(jは、X)CNTエッジが点j、xの権利を発する点I物品を意味します。コード:
構造体縁{ int型のValへ; }。 ベクター <エッジ>グラフ[ 100 ]。 ボイド add_edge(INT から、INTに、int型の値){ [グラフから.push_back]((エッジ){}値に); }
第三に、隣接リスト
テーブル全体で各要素はエッジを表し、開始、終了及びエッジ重みは、素子(典型的には、構造を有する)に格納されています。第1の最適化[]アレイを格納した後隣接リスト後の第一の側の各点、構造の増加は、次の格納された同一のエッジの開始点で。したがって、限りの使用として、全ての数n接合縁を通ってたかったから出発
用(int型、iは、i =グラフ[I] .next I =最初の[N])を
缶、隣接するテーブルと一致し時間をかけて。
コードの実装に、各場合にのみサイド構造最適化された第一次電流側【から】現在の数【から】側に前に最初。コード:
構造体の縁{ INT に、ヴァル、次。 }。 エッジグラフ[ 10000 ]。 int型最初の[ 100 ]、edge_cnt = 0 。 ボイド add_edge(INT から、INTに、int型の値){ グラフ[に対して++ edge_cnt] =(エッジ){、値、最初の[ より}]。 最初の[ から ] = edge_cnt。 }
3つの最も一般的な方法は、実際の状況に応じて適切なストレージ構成を選択するために、グラフC ++、特定の分析を構築することです。より複雑な構造がより有用ではありません。