728x90
너비 우선 탐색 BFS는 Breadth First Search의 약자이고, 너비를 우선으로 탐색하는 알고리즘이다. DFS는 최대한 멀리 있는 노드를 우선으로 탐색하는 방식이었다면 BFS는 가까운 노드를 우선으로 탐색한다. 블루투스나 와이파이 같은 원리랑 비슷하다.
다음은 너비 우선 탐색의 과정을 그림으로 나타낸 것이다.
시작 노드인 '1'을 큐에 넣어주고, 방문 처리를 한다. 초록색은 처리 중인 노드, 파란색은 방문 처리된 노드를 표현한다.
큐에서 '1'을 꺼내 주고 방문하지 않은 인접 노드 '3'을 큐에 넣어주고 방문 처리를 한다.
큐에서 '3'을 꺼내주고 방문하지 않은 인접 노드 '4', '5'를 큐에 넣어주고 방문 처리를 한다.
큐에서 '4'를 꺼내준다. 이때 방문하지 않은 인접 노드가 존재하지 않으므로 무시한다.
큐에서 '5'를 꺼낸다. 방문하지 않은 인접 노드 '2'를 큐에 넣어주고 방문 처리한다.
큐에서 '2'를 꺼낸다. 이때 방문하지 않은 인접 노드가 존재하지 않고 큐에 더 이상 꺼내 줄 노드가 존재하지 않으므로 종료된다.
최종적으로 너비 우선 탐색이 진행한 모습이다. 결과적으로 노드의 방문 순서는 1 - 3 - 4 - 5 - 2가 된다.
다음은 너비 우선 탐색을 코드로 표현한 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
from collections import deque
def bfs(graph, start, visited):
queue = deque([start])
visited[start] = True
while queue:
v = queue.popleft()
print(v)
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
graph = [
[],
[3],
[5],
[4,5],
[3],
[2,3]
]
visited = [False] * 6
bfs(graph, 1, visited)
|
참고자료
728x90
'취업을 준비하며 정리하는 컴퓨터 지식 > Algorithm' 카테고리의 다른 글
[Algorithm] 순차 탐색은 뭐야? (0) | 2021.01.12 |
---|---|
[Algorithm] 병합 정렬은 뭐야? (0) | 2021.01.11 |
[Algorithm] 깊이 우선 탐색(DFS)은 뭐야? (0) | 2021.01.08 |
[Algorithm] 입력 받는 방법? (0) | 2021.01.07 |
[Algorithm] 계수 정렬은 뭐야? (0) | 2021.01.06 |