DFS(깊이 우선 탐색)과 함께 그래프 탐색 알고리즘의 기본이자 대표격이라 할 수 있는 BFS(너비 우선 탐색)에 대해 알아보자
Breadth First Search, 너비 우선 탐색이란 말 그대로 너비를 우선시하여 그래프를 탐색하는 방법이다. 한 노드와 연결되어 있는 모든 노드를 살펴본 후에, 그 다음 깊이로 이동하여 과정을 반복한다.
BFS는 다음의 규칙으로 진행된다.
1. 노드와 연결된 이웃 노드들을 모두 큐에 넣는다.
2. 큐에서 꺼낸 노드와 연결된 이웃 노드들을 모두 큐에 넣는다.
3. 큐가 소진될 때까지 반복한다.
그림으로 나타내면 다음과 같다.
이리 하여 너비 우선 탐색을 완료했다.
앞에서도 언급하였지만 큐 자료구조를 사용한다. DFS의 경우 가장 마지막에 넣은 값을 바로 다시 사용할 수 있어야 하므로 스택 자료구조로 구현하였지만, BFS의 경우 먼저 들어간 노드 (먼저 이웃한 노드)가 뒷 노드보다 먼저 탐색되어야 하므로 선입선출(FIFO) 구조를 가지고 있는 큐를 사용한다.
위 그림에서 큐에 숫자가 담기고 빠지는 과정을 나타내보면 다음과 같다. (인접한 노드가 여러 개일 경우 숫자가 작은 노드부터 먼저 넣기로 하자)
즉 탐색 순서는 1→2→3→4→5→6→7→8 이다.