図ストレージ方法の三種類

   図3保存方法

A. 隣接行列  

  利点:明確、簡潔、呼び出しやすく、書きやすいです。

  短所:大きなメモリフットプリント、および重い側を保持する方法は(それが可能であるが、私はない)、3000直接爆発上の点の数

  スコープ:点の少ない数は、一般的に組み合わせて使用​​される図の密集は、推移閉包であるfloyed。

  コード:

    scanf関数(" %d個の%のD "、&​​U&V、およびW)
    [U] [V] = Wは、
    [V] [U] = W。// 双向边

II。隣接リスト

  長所:より便利と言うあなたはすぐにあなたが重い側を保存することができ、各点の度合いを知ることができ、小さなスペース、

  デメリット:見つけ、側面を削除することは非常に簡単、あなたがエッジを削除したい場合は、次の2つのリストに無向グラフを探して、STLで削除する必要があり、スピードが遅くなります

  適用範囲:ほとんどの場合、ライン側を削除する必要はありません

  コード:

構造体のエッジ{
     int型V、W。
}。
ベクター<エッジ>エッジ[MAXN]。
ボイド addedge(INT U、INT V、INT W) { エッジ[U] .push_back({V} W) エッジ[V] .push_back({U、W})。// 双向边 }

 

III。主演する元チェーン

  利点:より多くの隣接テーブルよりも側面も非常に便利です削除し、一部のカードは、スペースの問題を解決することができ、スペースを節約する、あなただけが次の、より速いスピードを指すようにポインタを変更する必要があります

  短所:それは悩み、トラブルの理解に書かれている場合、パフォーマンスが激しいのようです

  用途:対象の側面を除去する必要性、所要時間の高速タイトル

  コード:

構造体のエッジ{
     INT 、次に、Wに対して、
}エッジ[MAXN * 2 ]。
INT CNT 、ヘッド[MAXN]、S、T、N、M。
ボイド addedge(INT U、INT V、INT W)
{ 
    エッジ[ ++ CNT] .TO = V。
    エッジ[CNT] .W = W。
    エッジ[CNT] .next = 頭部[U]。
    ヘッド[U] = 頂。
} 
構造体プレ{
     int型V、エッジ。
} [MAXN]事前;

 

   説明:これは、方法で理解することがより困難であるので、それを読むために誰か他の人のブログを見て、主に、いくつかの解釈を行います

  図の場合、入力

  1 2

  2 3

  3 4

  1 3

  4 1

  1 5

  4 5

  エッジ[I] .TOはエッジi番目の終了を示す前記構造のため、エッジ[i]はi番目の開始点と一の側縁.next下部の格納位置を示す、エッジ[i]が.Wであります辺の重み。

  iは最初のエッジに記憶された開始点の位置を示すために使用されるアレイヘッド[]は、ヘッドは、[]配列は、一般に、-1に初期化され ますが実際にここで見つける最初実際に格納位置側Iすべての側面のための出発点として、最後の入力の数。

  第1の格納場所の下縁部と一の側の起点I格納位置と同じ出発点で我々は、この私の点のそれぞれの側を容易にすることができます

  

  初期化CNT = 0、今我々はまだ外観をシミュレートするために、上記のチャートや入力に従います。


  エッジ[0] .TO = 2。エッジ[0] .next = -1。ヘッド[1] = 0;

  エッジ[1] .TO = 3。エッジ[1] .next = -1。ヘッド[2] = 1;

  エッジ[2] .TO = 4。エッジ[2]、次= -1。ヘッド[3] = 2;

  エッジ[3] .TO = 3。エッジ[3] .next = 0。ヘッド[1] = 3;

  エッジ[4] .TO = 1。エッジ[4] .next = -1。ヘッド[4] = 4。

  エッジ[5] .TO = 5。エッジ[5] .next = 3。ヘッド[1] = 5。

  エッジ[6] .TO = 5。エッジ[6] .next = 4。ヘッド[4] = 6。

 

  明らかに、ヘッドは、[i]はiが保存されたすべてのエッジが最大のものから始まる番号が、最初の頂点Iの始端としてこの場所れます。

   トラバースが後方横断するときに、それは逆に言うことですが、これは入力シーケンスの結果の精度に影響を与えません。

  例上記の図の例では、ノード1から出発して三辺を有し、それらは0,3,5とヘッド番号が付けられている[1] = 5

  私たちは、開始位置uのノードするすべての側面を通過する際に、このような何か:

   

  以下のためにint型 I =ヘッド[U];〜I; I =エッジ[I] .next)

 

 

  その数は、次に[3] .next、すなわちエッジ数0 [5] .next、数3は側である第一縁部5、即ち、ヘッド[1]、及びそのエッジを横断し、その後縁を継続し、逆の順番で見ることができます。

  

第三部原作者のおかげでhttps://blog.csdn.net/ACdreamers/article/details/16902023を引用

 

おすすめ

転載: www.cnblogs.com/ztdf123/p/11391062.html