4. 3을 꺼내서 방문처리 후, 3과 인접한 노드 1, 4, 5 중 방문하지 않는 4 5를 큐에 넣는다.
5. 8을 꺼내서 방문처리 후, 8과 인접한 노드가 없으므로 큐에 넣지 않는다.
6. 7을 꺼내서 방문처리 후, 7과 인접한 노드 2,8,6 중 방문하지 않은 노드 6을 큐에 넣는다.
7. 4를 꺼내서 방문처리 후, 인접한 노드가 모두 방문했으므로 큐에 넣지 않는다.
8. 5를 꺼내서 방문처리
9. 6을 꺼내서 방문처리
따라서, 전체 노드 탐색 순서는
1 → 2 → 3 → 8 → 7 → 4 → 5 → 6
이를 정리하자면,
탐색 시작 노드를 큐에 삽입하고 방문처리
큐에서 노드를 꺼낸 뒤에 해당 노드의 이접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문처리
더 이상 2번의 과정을 수행할 수 없을때까지 반복
BFS구현
# 각 노드가 연결된 정보를 표현
# 0번노드는 없으니깐 빈리스트
# 1번노드에 연결된 노드는 2, 3, 8
graph = [
[],
[2, 3, 8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
#각 노드가 방문된 노드 표현
# >> 우선 모든 노드는 방문하지 않은 것처럼
visited = [False] * 9
print(visited)
>>> [False, False, False, False, False, False, False, False, False]
from collections import deque
# 필요인자 : 그래프, 시작노드, 방문처리리스트
def bfs(graph, start, visited):
# queue는 큐 자료구조 1을 넣고 방문처리
queue = deque([start])
visited[start] = True
# 큐 안에
while queue:
# 큐 안에 있는 것을 빼고 방문처리.
# >> 1
v = queue.popleft()
print(v, end=' ')
# 노드1번에 인접한 노드 2,3,8 중 방문하지 않았다면 큐에 넣고 방문처리
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True