자료구조

너비 우선 탐색(BFS : Breadth First Search)

LimeCoding 2022. 3. 30. 21:47

너비 우선 탐색(Breadth First Search)는 BFS라고도 하며 그래프를 순회하는 방법중 하나이다. 너비 우선 탐색은 깊이 우선 탐색과 다르게 인접한 정점을 모두 방문한 후 정점을 방문한 순서대로 다시 모든 인접한 정점을 방문하는 방식의 탐색 방법이다. 너비 우선 탐색은 큐로 구현을 할 수 있다. 너비 우선 탐색 방법은 다음과 같다.

 

  1. 너비 우선 탐색이 시작될 정점 v를 선택한다.
  2. 선택된 정점 v에 대해 방문 표시와 방문 처리를 하고 큐에 삽입한다.
  3. 큐의 front에서 꺼낸 정점의 인접 정점들에 대해 방문되지 않은 정점들을 큐에 삽입하고 방문 처리를 한다.
  4. 큐가 공백이 될 때까지 3의 과정을 반복한다.

다음은 너비 우선 탐색의 예시이다.

 

정점 0 방문

정점 0을 방문한 후 큐에 0을 넣는다.

 

정점 3 방문

정점 0을 Dequeue하고 정점 3을 방문한 후 큐에 0을 넣는다.

 

정점 2 방문

정점 2를 방문한 후 큐에 2를 넣는다.

 

 

정점 1 방문

정점 1을 방문한 후 큐에 1을 넣는다.

 

 

정점 5 방문

정점 3의 인접 정점을 방문하기 위해 3을 Dequeue하고 정점 5를 방문한 후 큐에 5를 넣는다.

 

 

 

정점 4 방문

정점 4를 방문한 후 큐에 4를 넣는다.

 

정점 6 방문

2와 1의 인접 정점을 방문하기 위해 Dequeue를 하지만 인접한 정점은 모두 방문했기 때문에 스택에서만 빠지게 된다. 다음 정점 5의 인접 정점을 방문하기 위해 Dequeue하고 정점 5의 인접 정점은 6을 방문한 후 큐에 넣어준다.

 

너비 우선 탐색 종료

모든 정점을 방문했기 때문에 큐에 남아있는 4와 6은 정의된 함수(BFS 함수)의 기능에 따라 별도의 인접 정점 방문없이 모두 큐에서 빠진다.

'자료구조' 카테고리의 다른 글

신장 트리(Spanning Tree)  (0) 2022.03.30
깊이 우선 탐색(DFS : Depth First Search)  (0) 2022.03.30
그래프 표현  (2) 2022.03.30
그래프(Graph)  (0) 2022.03.30
AVL 트리(AVL Tree)  (0) 2022.03.29