Developer Toolbox

幅優先探索(BFS)

グラフを層ごとに調べます。次の頂点はキューで決まるので、いつも近い頂点から先に訪問します。

  • O(V + E)
  • メモリ O(V)
  • キュー
このページのほかの用語
  • 頂点: グラフの点。ここでは文字の入った円で描いています。
  • 辺: 2つの頂点を結ぶ線。ここではどちら向きにもたどれます。
  • 隣の頂点: ある頂点と辺で結ばれた頂点。アルファベット順に調べます。
0 / 60 ステップ
  • キューの中
  • 現在
  • 完了
  • 探索木の辺
  • 飛ばした辺

A から始めます。再生を押すか、1ステップずつ進めてください。

スペースキー: 再生・一時停止。左右の矢印キー: ステップ移動。Home キーと End キー: ジャンプ。

試してみましょう: 2つの部分に分かれたグラフを選んでください。始点とつながっていない頂点には、最後までたどり着きません。

仕組み

BFS は始点をキューに入れます。そして、キューの先頭の頂点を取り出し、その新しい隣の頂点を末尾に加える、という作業を繰り返します。キューは来た順に処理するので、辺1本で届く頂点はすべて、辺2本で届く頂点より先に完了します。頂点の横の数字は始点からの距離、つまりそこへ着くのに必要な辺の最少本数です。

向いている場面

ステップ数で最短の道が必要なときに BFS を使います。パズルの最少手数、ネットワークの最少ホップ数、知り合いの知り合いまでの範囲にいる人などです。大きなグラフでは、1つの層をまるごと抱えるのでキューが長くなることがあります。