Next Sec.: ソーティング
Upper Sec.: グラフに関するアルゴリズム
Prev. Sec.: パスの数え上げ
「各辺に長さをもつグラフにおいて,1つの頂点sから他のすべての頂点へ の最短路のパスを求めよ.」
LD[x]+d(x,y) < LD[y] -- > LD[y] := LD[x] + d(x,y) LR[y] := x
Dijkstraのアルゴリズム
ラベリング法の一種.基本的には頂点の横型検索を行うが,候補頂点の選択順序を距離ラベルの小さい順とする.候補頂点の集合をQLISTとする.即ち,
以下のアルゴリズムの記述はPASCAL-like
for all (x in V) do LR[x]:= 0; for all (x in V) do LD[x]:= unlimited; LD[s] := 0; QLIST := {s}; while QLIST != empty do begin choose x in QLIST s.t. LD[x] is minimal; QLIST := QLIST - {x}; for each y s.t. ((x,y) in E) and y != LR[x] do if LD[x] + d(x,y) < LD[y] then begin LD[y] := LD[x] + d(x,y); LR[y] := x; QLIST := QLIST or {y}; end end;
このアルゴリズムの結果得られる最短路の記述LRはグラフGのsの 根(root)とする1つの展張木を与える.