優先キュー最適化プロセスのダイクストラアルゴリズム:
1.初期化D [S] = 0、他の無限
2.ノード間距離Sとその数を格納ポイントの構造
3.q.push((ノード){0、S})。
スキップが訪問、または訪問先としては、dをマークした場合、最初のチームU(現在からの最も近い点)を削除4 [U]は推定値から決意値となります
列挙及びv uが接続され、Uは短い輸送経路更新D [V]、及びq.push((ノード){D [V]、Vを})を得た場合、
6.を繰り返し4,5-ステップキューが空になるまで
vv123コード仕様:
1.括弧は折り返されません。
2.インデントには2つの空間は、
3.ライン内のスペースを再生されません
例えばUとして4.短い変数名、V、W、D、同じ行に書かれた変数名、ビット配列のサイズはLG(サイズ)であります
二百二十から一空の行との間の構造、機能、それはあまりにも空行がある場合、コード機能の同量
6.一貫して使用するIOS :: sync_with_stdio(偽)とCIN / COUT
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 INT N、M、S、U、V、W、ヘッド[ 100005 ]、D [ 100005 ]、CNT。 4 BOOL VIS [ 100005 ]。 5 6 構造体のエッジ{ 7 int型V、W、次。 8 } E [ 500005 ]。 9 10 構造体ノード{ 11 INT POS、W。 12 ブール 演算子 <(constのノード&X)のconst { 13 リターン XW <ワット; 14 } 15 }。 16 17 空隙追加(INT U、INT V、INT W){ 18 E [++ CNT] .V = V。 19 E [CNT] .W = W。 20 E [CNT] .next = 頭部[U]。 21 頭[U] = CNT。 22 } 23 24 空隙ダイクストラ(){ 25 [S] = D 0 。 26 PRIORITY_QUEUE <ノード> Q。 27 q.push((ノード){ 0 、S})。 28 29 しばらく(!{q.empty()) 30 ノードT = q.top(); q.pop()。 31 INT U = t.pos、W = TW。 32 であれば(VIS [U])続けます。 33 VIS [U] = 真。 34 35 のために(INTは iはヘッド= [U]; I;私は= E [I] .next){ 36 のint V = E [I] .V。 37 であれば(dは[V]> D [U] + E [I] .W){ 38 D [V] = D [U] + E [I] .W。 39 であれば(!q.push((ノード){D [V]、V})VIS [V])。 40 } 41 } 42 } 43 } 44 45 int型のmain(){ 46の IOS :: sync_with_stdio(偽)。 47 のmemset(D、127、はsizeof (d)参照)。 48 CIN >> N >> M >> S。 49 のために(INT iは= 1 ; I <= M; I ++ ){ 50 CIN >> U >> V >> W。 51 追加(U、V、W)。 52 } 53 ダイクストラ()。 54 のために(INT iは= 1 ; iが<= N; I ++ ) 55 COUT << D [i]は<< " " 。 56 }