알고리즘 - 너비 우선 탐색
너비 우선 탐색(BFS)
BFS(breadth-first search)는 시작노드에서 출발해 시작노드를 기준으로 가까운 노드를 먼저 방문하면서 탐색하는 알고리즘이다.
기능 | 특징 | 시간 복잡도(노드 수: V, 엣지 수: E) |
---|---|---|
그래프 완전 탐색 | - FIFO 탐색 - Queue 자료구조 이용 |
O(V+E) |
너비 우선 탐색은 선입선출 방식으로 탐색하므로 큐를 이용해 구현한다.
또한 탐색 시 시작노드와 가까운 노드를 우선하여 탐색하므로 목표 노드에 도착하는 경로가 여러 개일 때 최단 경로를 보장한다.
핵심이론
-
BFS를 시작할 노드를 정한 후 사용할 자료구조 초기화하기
BFS도 DFS와 마찬가지로 방문했던 노드는 다시 방문하지 않기 때문에 방문한 노드를 체크하기 위한 배열이 필요하다.
차이점이 있다면 탐색을 위해 스택이 아닌 큐를 사용하는 것이다. -
큐에서 노드를 꺼낸 후 꺼낸 노드의 인접 노드를 다시 큐에 삽입하기
이때 방문 배열을 체크하여 이미 방문한 노드는 큐에 삽입하지 않는다. 큐에서 꺼낸 노드는 탐색 순서에 기록한다. -
큐 자료구조에 값이 없을 때까지 반복하기
앞선 과정을 반복한다. 선입선출 방식으로 탐색하므로 탐색 순서가 DFS와 다름을 확인해보자.
알고리즘 - 너비 우선 탐색