カテゴリー: algorithm

BFS

概要

BFS(幅優先探索)とは、グラフ探索アルゴリズムの一つで、探索開始地点に近い距離の頂点から順にQueueに詰めて訪問していくアルゴリズムである。

詳細

疑似コードを以下に示す。

# Type Notation
Vertex
Edge
Graph = (Vertex, Edge)
Queue
BFS(g: Graph, source: Vertex):
  Initialize queue: Queue # 次に訪問する頂点を決定するキュー。sourceのみ入れておく。
  while queue is not empty:
    v: Vertex = dequeue from queue # 最初の要素をvに詰める
    for v' in connected with g[v]:
      if v' is not visited:
        # 新規に訪問する頂点に対し処理を行う
        enqueue v' to queue # queueに新規に訪問する頂点を詰める

計算量は $O(\vert V \vert + \vert E \vert)$ である。
なぜなら、各頂点はキューに高々一度enqueue/dequeueされるので $O(\vert V \vert)$, 各辺は一度だけ探索されるので $O(\vert E \vert)$ となるからである。

メモ

DFS(深さ優先探索)とセットで語られることが多い。両者の違いは 文献1 の 1-5. DFS と BFS との比較 が詳しい。

関連する問題

参考文献

関連項目

外部リンク

TODO