Loading [MathJax]/jax/output/CommonHTML/jax.js

組合せとグラフの理論(塩田)第6回 (5) 幅優先探索・深さ優先探索の応用

 

 幅優先探索・深さ優先探索を応用したいろんなグラフアルゴリズムを紹介します。

幅優先探索の応用:最短路

Th.20 幅優先探索木は、根から他の頂点への最短路を与える。
Ex.21  次のグラフ
の、0 を根とする幅優先探索木は
です。これは根 0 から 2, 5 へは最短距離 1, 根 0 から 1, 3, 4 へは最短距離 2 であることを表しています。

※ 辺の長さは1、と考えての話です。 辺ごとに「長さ」を設定しているグラフの最短路問題は後日やります。

深さ優先探索の応用:カット点判定

Def.22 深さ優先探索木においては親子関係が考えられ、根に近い方の頂点を祖先、根から遠い方の頂点を子孫と定める。
Ex.23  Ex.21 のグラフの 0 2 を根とする深さ優先探索木は ... 6月1日 訂正
     
となります。 根 2 の子は 00 の子は 55 の子は 141 の子は 3 と考えます。
Th.24 深さ優先探索木に使われなかった辺は、必ず祖先と子孫をつなぐ。
証明 子孫同士が結ばれていれば祖先にバックトラックしていないはずなので。(証明終)
Th.25 連結グラフ G の頂点 v を根とする深さ優先探索木を T とするとき、
vG のカット点であること T において v の子が 2 人以上いること
証明 Th.24 より、Tv に使われていない Gv の辺は Tv の同一連結成分の頂点同士しか結びません。 従っ て Tv の連結成分の個数は Gv の連結成分の個数に一致します。
GT GvTv
 T において v の子がひとりしかいときは vT の端点であり Tv は連結、従って Gv も連結です。 T において v の子がふたり以上いるときは Tv は非連結になり、従って Gv も非連結です。 (証明終)

他にも

 非連結なグラフでも幅優先探索・深さ優先探索を行うことができて、 こんな応用もあります:
この3つのアルゴリズムでは探索は幅優先でも深さ優先でも構いませんが、 道の探索では幅優先の方が最短路が見つかって嬉しいです。