幅優先探索と深さ優先探索(breadth-first search / depth-first search)

分類
テクノロジ系 アルゴリズムとプログラミング
出る試験
基本情報応用情報
重要度
★★★☆☆

つながりをたどって探す2つの進め方。近いところから横に広げるのが幅優先、行けるところまで縦に進むのが深さ優先。

もう少し詳しい説明

グラフの言葉

用語中身
グラフ点と線で、つながり方を表したもの
ノード(節点)点。状態や場所にあたる
エッジ(辺)線。つながりや移動にあたる
ルートノード(根)始めの点
子ノードある点から1つ進んだ先
リーフノード(葉)その先が無い点
深さ始めの点から何本の線をたどったか

木構造は、枝分かれだけで輪が無いグラフです。 探索の考え方は同じように使えます。

2つの進み方

幅優先探索深さ優先探索
進み方近いところから横に広げる行けるところまで縦に進む
使う入れ物キュー(先入先出)スタック(後入先出)または再帰
最短を保証するかするしない
使うメモリ多い(同じ深さを全部持つ)少ない(いまの道筋だけ)
英語breadth-first search(BFS)depth-first search(DFS)

幅優先探索が最短になる理由

手数の少ない順に調べるためです。

調べる順中身
1回目1手で行ける場所を全部
2回目2手で行ける場所を全部
3回目3手で行ける場所を全部

初めてゴールに届いたとき、それより少ない手数の道はすでに調べ終わっています。 そのため、最初に見つかったものが最短になります。

深さ優先探索は先に深く進むので、遠回りの道を先に見つけることがあります。

同じところを二度調べない

輪があるグラフでは、同じ場所に戻ることがあります。

手立て中身
調べ終わった場所を記録する一覧に残し、次からは飛ばす
終端として扱うすでに記録にある場所なら、そこから先へ進まない

記録しないと、同じ場所をぐるぐる回って終わりません。 スライドパズルのように状態が戻り得る題材では、ここが欠かせません。

使う場面

場面向くほう
最短の手数を知りたい幅優先探索
道があるかどうかだけ知りたいどちらでもよい
全部のつながりを調べたいどちらでもよい
メモリが限られている深さ優先探索
深さが非常に深い、または無限に続き得る幅優先探索(深さ優先は戻ってこなくなる)

処理の形

幅優先探索の流れ

手順すること
1始めの点をキューに入れる
2キューから1つ取り出す
3そこから行ける先を作り、ゴールかどうかを調べる
4調べ済みでなければキューに入れ、記録に加える
5キューが空になるまで2〜4を繰り返す

キューが空になったら、ゴールへ行く道が無いという結論になります。

試験ではこう出る

科目A(旧・午前)では、使う入れ物が問われます。幅優先はキュー、深さ優先はスタックです。

最短を保証するかも出ます。幅優先は保証し、深さ優先は保証しません。

午後や応用情報(プログラミング)では、擬似言語で書かれた幅優先探索を読む形で出ます。キューへの出し入れ、調べ済みの記録、ゴールの判定が空欄になります。

図の中のノードの番号を順に追うと、どの順で作られたかが分かります。 同じ深さのものが続けて並ぶのが幅優先探索の特徴です。

関連する用語

キュー
先入先出の入れ物。幅優先探索で使う
スタック
後入先出の入れ物。深さ優先探索で使う
木構造
枝分かれした形。グラフの一種として扱える
再帰
自分を呼ぶ書き方。深さ優先探索を短く書ける
計算量
件数が増えたときの伸び方

ミニクイズ

幅優先探索で、次に調べる対象を取り出すために使うデータ構造はどれか。

正解は 2番:キュー

幅優先探索は、近いところから順に調べるので、先に見つけたものを先に取り出す必要があります。そのため先入先出のキューを使います。スタックは後入先出なので、最後に見つけたところから進む深さ優先探索に向きます。ハッシュ表は値から位置を求める仕組み、二分探索木は大小で枝分かれさせた木で、どちらも探索の順序を決める入れ物ではありません。

間違えた用語の復習リストを見る →

この分野をまとめて解く → アルゴリズムとプログラミングのミニテスト(全44問)

最終更新:2026-11-09