グラフ理論の基礎 - 構築された描画のメモやアイデアを整理

今日では、クラス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 ++、特定の分析を構築することです。より複雑な構造がより有用ではありません

おすすめ

転載: www.cnblogs.com/miserweyte/p/11469438.html