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はグラフGsの 根(root)とする1つの展張木を与える.




Next Sec.: ソーティング Upper Sec.: グラフに関するアルゴリズム Prev. Sec.: パスの数え上げ