← ブログ一覧

BFS(幅優先探索)アルゴリズムをわかりやすく解説

BFS幅優先探索グラフ最短経路AlgoNote

BFSとは?

BFS(Breadth-First Search、幅優先探索)は、グラフやツリーで近いノードから順番に探索するアルゴリズムです。開始ノードから一段階ずつ遠ざかりながら、すべてのノードを訪問します。

水に石を投げた時に波紋が同心円状に広がるように、BFSは開始点から距離1のノード→距離2のノード→距離3のノードの順で探索します。


なぜ重要か?

BFSはグラフアルゴリズムの基本であり、コーディングテストで非常に頻繁に出題されます。

  • 最短経路保証: 重みなしグラフで最短経路を見つけられる
  • レベル別探索: ツリーのレベル順巡回、ネットワーク階層探索に活用
  • コーディングテスト必須: 迷路探索、トマト問題、最小移動回数など代表問題多数

動作原理

BFSはキュー(Queue)データ構造を使用します。

ステップ1. 開始ノードをキューに入れ、訪問済みとマークします。

ステップ2. キューからノードを一つ取り出します。

ステップ3. 取り出したノードの隣接ノードのうち、未訪問のものをすべてキューに入れ、訪問済みとマークします。

ステップ4. キューが空になるまでステップ2〜3を繰り返します。


時間計算量と空間計算量

計算量
時間O(V + E)
空間O(V)

Vは頂点数、Eは辺数です。すべてのノードを1回ずつ訪問し、すべての辺を1回ずつ確認するためO(V + E)です。


BFS vs DFS の違い

比較BFSDFS
データ構造キュー(Queue)スタック / 再帰
探索順序近いノード優先深いノード優先
最短経路保証(重みなしグラフ)保証しない
メモリ幅広いグラフで多く使用深いグラフで多く使用
主な活用最短距離、レベル順巡回経路探索、サイクル検出

最短経路が必要ならBFS、すべての経路を探索する必要があるならDFSを選びます。

DFSの可視化も確認 →


代表的な活用問題

迷路探索 — 出発点から到着点までの最小移動回数を求める問題。BFSで解くと、最初に到着点に達した瞬間が最短経路です。

マルチソースBFS — 複数の開始点から同時にBFSを実行します。キューにすべての開始点を先に入れてから処理を開始します。

ネットワーク接続確認 — 2つのノードが同じネットワークに属するかを判定します。


よくあるミス

  • 訪問チェックをキュー投入時ではなく取り出し時に行うと、同じノードが複数回キューに入る
  • 2次元配列問題で範囲チェックを漏らし、インデックス超過エラー
  • マルチソースBFSで開始点を一つしか入れない間違い

AlgoNoteで直接確認しましょう

BFSがグラフでどのように波紋のように広がっていくか、AlgoNoteで一段階ずつ視覚的に確認できます。ノードと辺を自分で構成し、探索過程を観察してみてください。

BFSの可視化へ →

BFS(幅優先探索)アルゴリズムをわかりやすく解説 - AlgoNote | 알고노트(AlgoNote)