アルゴリズム勉強 #2 幅優先探索(BFS)をpythonで実装する
2021.10.24
今回は幅優先探索について勉強しました。

幅優先探索とは?

  • 経路探索を行いたいときなどに使う
  • スタート地点から近い順に探索していく(=幅優先)

試したコード

python
from collections import deque

n = 4
nodes =[[1, 2], [2, 3], [3, 4], [4, 2]]

graph = [[] for _ in range(n+1)]

for i in range(len(nodes)):
    a, b = nodes[i]
    graph[a].append(b)
    graph[b].append(a)

# graph[i] = [X, X...]
#i地点はX, X, ...とつながっているというリスト

# スタートは地点1
dist = [-1] * (n+1) # dist: dist[i]はスタート地点(地点1)から地点iまでの距離
dist[0] = 0
dist[1] = 0 # dist[1]は地点1から地点1までなので距離0

d = deque()
d.append(1)

while d:
    v = d.popleft()
    for i in graph[v]:
        if dist[i] != -1:
            continue
        dist[i] = dist[v] + 1
        d.append(i)

ans = dist[1:]
print(*ans, sep="\n")

References