Breadth First Seaarch : 너비 우선 탐색
그림을 보면 한눈에 차이점이 보이지 않는가?
DFS는 깊게를 우선으로 탐색하고, BFS 넓게를 우선으로 탐색한다.

그래서 DFS는 재귀로 작성할 수 있겠고, BFS는 그렇지 않다.

1. 큐에 방문한 노드를 넣는다.
2. 큐에서 방문한 노드를 꺼내서 인접한 노드들을 차례로 방문한다.
3. 만약 인접한 노드를 이미 방문했다면, 방문하지 않아도 된다.
4. 큐가 소진될 때까지 계속한다.
from collections import deque
def bfs(graph, start, visited):
queue = deque([start])
visited[start] = True # 첫 노드를 방문함
while queue:
v = queue.popleft()
for i in graph[v]: # 인접 리스트 탐색
if not visited[i]: # 인접한 노드중에서 방문하지 않으면
queue.append(i)
visited[i] = True
코드를 살펴보면, queue에서 뽑아낸 값에서 인접 리스트 방식으로 인접한 리스트를 탐색한다.
인접한 노드들을 아직 방문하지 않았으면, queue에 넣고 visited를 체크하는 모습이다.