(현재 큐에서 꺼낸 노드는 회색으로, 방문처리한 노드는 검정색으로, 방문하지 않은 노드는 흰색으로 표시한다.)
from collections import deque
def bfs(v):
visited[v] = True
queue = deque([v])
while queue:
x = queue.popleft()
print(x, end=' ')
for i in graph[x]:
if not visited[i]:
visited[i] = True
queue.append(i)
# 각 노드가 연결된 정보를 표현
graph = [
[], # 0번 노드가 없으므로 index 0은 비워둠
[2, 3], # 1번 노드와 연결된 노드
[1, 4, 5],
[1, 6, 7],
[2, 8],
[2, 9],
[3],
[3],
[4],
[5]
]
# 각 노드가 방문된 정보를 표현
visited = [False]*10
bfs(1)
출력 : 1 2 3 4 5 6 7 8 9
BFS 또한 탐색 알고리즘으로 그래프 그림을 이용해 1차원 배열이나 2차원 배열을 그래프 형태로 생각하면 BFS를 이용해 문제를 수월하게 풀 수 있다.
코딩 테스트에서 보통 DFS로 풀 수 있으면 BFS로도 풀 수 있고, 이 반대도 마찬가지이다(보통 DFS보다는 BFS 구현이 조금 더 빠르게 동작한다).
하지만 문제에 따라 더 효율적인 풀이가 될 수 있는 방법이 있으므로 여러 문제를 풀어보며 더 나은 해결 방법을 잘 생각해보자.