BFS는 너비 우선 탐색이라고도 부르며, 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘이다
BFS는 큐 자료구조를 이용하며, 구체적인 동작 과정은 다음과 같다
1.탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다
2.큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드를
모두 큐에 삽입하고 방문 처리한다
3.더 이상 2번의 과정을 수행할 수 없을 때까지 반복한다
보통 최단경로를 찾는 문제에서 많이 사용한다.
ex)백준2178 - 미로 최단거리 찾기
백준 7576 - 가중치가 없는 그래프에서 다중 시작점에서 모든 칸 까지 최단거리 찾기
시작점 A 에서 F 까지의 최단 경로를 알고 싶다고 하자.
BFS를 진행하면서 F 를 처음 딱 방문하는 순간이 있을 것이다.
그 순간에 거리가 1인 Node 들은 이미 다 방문했고,
거리가 2인 Node 들을 방문하고 있다.
만약 A 에서 F 까지의 최단 거리가 1이라면 거리가 1인 Node 들을 찾을 때,
이미 F 를 방문했을 것이다.
그런데 거리가 2인 Node 들을 방문했을 때 발견했다는 건,
A 에서 F 까지의 최단 거리가 2일 수밖에 없다는 것이다.
F 를 처음 방문한 그 순간이 F 를 가장 빠르게 찾은 것이다.
그럼 이때의 시작점에서부터 F 까지의 경로를 저장해 놓으면 최단 경로를 구할 수 있다.
실행 결과
1 2 3 8 7 4 5 6
'알고리즘' 카테고리의 다른 글
플로이드-워셜 ( Floyd-Warshall) (0) | 2022.01.19 |
---|---|
다익스트라 최단경로 (Dijkstra) (0) | 2022.01.19 |
다이나믹 프로그래밍 (Dynamic programming) (0) | 2022.01.19 |
구현 (Implementation) (0) | 2022.01.19 |
DFS (Depth-First Search) 깊이 우선 탐색 (0) | 2022.01.19 |