BFS(너비 우선 탐색)

이찬혁·2024년 1월 12일

알고리즘

목록 보기
13/72

BFS

기능특징시간복잡도(노드 수: V, 엣지 수: E)
그래프 완전 탐색FIFO 탐색, Queue 자료구조 이용O(V + E)

BFS란?
너비 우선 탐색(Breadth-first search)은 그래프의 완전 탐색 방벙 중 하나로, 시작 노드에서 출발해 시작 노드를 기준으로 가까운 노드를 먼저 방문하면서 탐색하는 알고리즘이다.
탐색 시작 노드와 가까운 노드를 우선하여 탐색하므로 목표 노드에 도착하는 경로가 여러 개일 때 최단 경로를 보장한다.

Key Point

  1. 방문했던 노드는 다시 방문하지 않으므로 방문한 노드를 체크하기 위한 배열이 필요
  2. 그래프를 인접 리스트로 표현
  3. 선입선출 원칙으로 탐색하기 때문에 스택이 아닌 큐를 사용

너비 우선 탐색 3단계

  1. BFS를 시작할 노드를 정한 후 사용할 자료구조 초기화하기
    방문했던 노드는 다시 방문하지 않으므로 방문한 노드를 체크하기 위한 배열이 필요하며, 탐색을 위해 큐를 사용한다.

bfs-init

  1. 큐에서 노드를 꺼낸 후 꺼낸 노드의 인접 노드를 다시 큐에 삽입하기

큐에서 노드를 꺼내면서 인접 노드를 큐에 삽입한다. 이 때 방문 배열을 체크하여 이미 방문한 노드는 큐에 삽입하지 않는다. 또한 큐에서 꺼낸 노드는 탐색 순서에 기록한다.

bfs-1

  1. 큐 자료구조에 값이 없을 때까지 반복하기
    큐에 노드가 없을 떄까지 앞의 과정을 반복한다.
    선입선출 방식으로 탐색하므로 탐색 순서가 DFS와 다르다.

bfs-2

profile
나의 개발로그

0개의 댓글