BFS 알고리즘이란?
BFS(Breadth-First Search)란 너비 우선 탐색이라고도 불리며 그래프에서 시작 노드에 인접한 노드부터 탐색하는 알고리즘이다.
주로 그래프에서 모든 간선의 비용이 동일한 조건에서 최단 거리를 구하는 문제를 효과적으로 해결할 수 있다.
BFS 알고리즘 작동 과정
1. 정점 i를 방문한다.
2. 정점 i에 인접한 정점 중에서 아직 방문하지 않은 정점이 있으면, 이 정점들을 모두 큐에 저장한다.
3. 큐에서 정점을 삭제하여 새로운 i를 설정하고, 단계 (1)을 수행한다.
4. 큐가 공백이 되면 연산을 종료한다
배열 visited[n]을 이용하여, 정점의 방문 여부를 표시한다
- visited[i] = True : 방문하였음
- visited[i] = False: 방문하지 않음
그림 1 과 같은 그래프 예시를 통해 BFS 동작 과정을 알아보자. 노드 1을 시작 노드로 설정한다. 일반적으로 인접한 노드가 2개 이상인 경우에는 해당 노드들 중 번호가 낮은 노드부터 처리한다.
그림 1. BFS 동작 설명을 위한 그래프 예시
편의상 현재 큐에서 꺼내 처리 중인 노드는 파란색으로, 방문 처리한 노드는 회색으로 표시한다
(1) 시작 노드인 노드 1을 큐에 삽입하고 방문 처리 한다.
(2) 큐에서 노드 1을 꺼내고 노드 1과 인접한 노드 2, 3을 큐에 삽입하고 방문 처리한다.
(3) 큐에서 노드 2를 꺼내고 노드 2와 인접한 노드 8을 큐에 삽입하고 방문 처리한다.
(4) 큐에서 노드 3을 꺼내고 노드 3과 인접한 노드 4, 5를 큐에 삽입하고 방문 처리한다.
(5) 큐에서 노드 8을 꺼내고 노드 8과 인접한 노드 6, 7을 큐에 삽입하고 방문 처리한다.
(6) 그래프 내 노드에서 방문하지 않은 노드가 없으므로 큐에서 모든 노드를 차례대로 꺼낸다.
결과적으로 노드의 탐색 순서, 즉 큐에 삽입한 순서는 다음과 같다
1 -> 2 -> 3 -> 8 -> 4 -> 5 -> 6 -> 7
수도코드
코드 구현
C++
Python
실행 결과
Reference
https://heytech.tistory.com/56
[Python] BFS 알고리즘 개념 및 실습
본 포스팅에서는 너비 우선 탐색이라고 불리는 BFS(Breadth-First Search)에 대해 알아봅니다. 📚 목차 1. BFS 알고리즘이란? 2. BFS 알고리즘 동작 과정 3. BFS 파이썬 구현 3.1. 소스코드 설명 3.2. 전체 소스
heytech.tistory.com