幅優先探索 (Breadth First Search)
概要
単一始点最短経路問題(SSSP)を解くアルゴリズム。
グラフ \(G = (V, E)\) において、辺のコストが全て1である場合、BFSで探索することで、1頂点から各頂点までの距離を線形オーダーで探索できる。
計算量
\(O(|V| + |E|)\)
実装
# G[v]: 頂点vに隣接する頂点list
# N: 頂点数
# s: 開始頂点
from collections import deque
def bfs(N, G, s):
dist = [-1] * N
que = deque([s])
dist[s] = 0
while que:
v = que.popleft()
d = dist[v]
for w in G[v]:
if dist[w] > -1:
continue
dist[w] = d + 1
que.append(w)
Verified
-
AOJ: "ALDS1_11_C: Graph I - Breadth First Search": source (Python3, 0.03sec)