CS/Algorithm
λλΉ μ°μ νμ(Breath First Search, BFS)
deo2kim
2020. 9. 27. 20:05
λ°μν

π λλΉ μ°μ νμ(BFS) μ΄λ
- λλΉλ₯Ό μ°μ μΌλ‘ νμ¬ νμμ μννλ μκ³ λ¦¬μ¦
- μ΅λ¨κ²½λ‘(μ΅λ¨κΈΈμ΄)λ₯Ό μ°Ύμ λ μ£Όλ‘ μ¬μ©νλ€.
- νμ κ·Έλνλ‘ ν΄κ²°νλ€. (νμ΄μ¬μμλ λ°ν¬(deque)λ₯Ό μ°λ©΄ μλκ° λΉ λ¦)
π λλΉ μ°μ νμ(BFS) ꡬν
from collections import deque
# μΈμ 리μ€νΈ
# λ
Έλ: 1,2,3,4,5,6,7
n = 7
adj = {x: [] for x in range(1, n + 1)}
edges = [
[1, 2],
[1, 3],
[2, 4],
[2, 5],
[3, 6],
[3, 7]
]
# 무방ν₯ κ·Έλνμ΄λ―λ‘ λ°λμͺ½λ μ±λ¦½
for edge in edges:
s, e = edge
adj[s].append(e)
adj[e].append(s)
print(adj)
# bfs λ queueλ₯Ό μ¬μ©νλ€. μλκ° λΉ λ₯Έλ°ν¬λ₯Ό μ¬μ©
q = deque()
q.append(1)
visited = [False] * (n + 1) # κ° μΈλ±μ€ λ°©λ¬Έν μ μ΄ μλμ§
visited[1] = True
visited_seq = []
while q:
c = q.popleft() # ν ꡬ쑰 μ΄λ―λ‘ κ°μ₯ μμμμ(μ μΌ μ²μμ λ€μ΄μ¨)λ₯Ό κΊΌλΈλ€.
for neighbor in adj[c]: # cμ μ΄μ λ
Έλ(cμμ λ°λ‘ κ° μ μλ κ³³)
if not visited[neighbor]: # λ°©λ¬Ένμ μ΄ μμΌλ©΄
q.append(neighbor) # νμ λ£μ΄μ£Όκ³
visited[neighbor] = True # λ°©λ¬Έ νμ
visited_seq.append(c) # μ¬κΈ΄ μμ¨μ€λ λλ€. λ¨μ§ λ°©λ¬Έμμλ₯Ό λνλ΄κΈ° μν κ²
print(f'λ°©λ¬Έμμ {visited_seq}')
λ°μν