アルゴリズム勉強 #2 幅優先探索(BFS)をpythonで実装する
2021.10.24
今回は幅優先探索について勉強しました。
幅優先探索とは?
- 経路探索を行いたいときなどに使う
- スタート地点から近い順に探索していく(=幅優先)
試したコード
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
https://note.com/melon_ms_mtcc/n/nd2c0c7c16edb めっちゃわかりやすかったです!