본문 바로가기
알고리즘

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

by 까망 하르방 2021. 2. 27.
반응형

BFS

그래프 전체를 탐색하되, 인접한 노드들을 차례대로 방문합니다. Queue 이용 

* DFS로 풀리는 문제는 일반적으로 BFS로도 풀 수 있습니다.

 

Process

※ 깊이 우선 탐색과는 달리 너비 우선 탐색에서는 발견과 방문이 같지 않습니다.

① 아직 발견되지 않은 상태

② 발견되었지만 아직 방문되지 않은 상태 (큐에 저장되어 있는 상태)

③ 방문된 상태

 

DFS와 BFS 비교

출처: 나무위키 경로 비교 BFS - Queue 이용 - 최소신장트리(Minimum Spanning Trees), 최단경로(Shortest Paths) 장점: 무한히 깊거나 무한에 가까운 트리인 경우에 효과적 단점: 목표 노드로 가는 경로들 모..

zoosso.tistory.com

활용

최단 경로를 찾을 때 유용 

※ BFS와 달리 DFS는 그래프의 구조에 관련된 다양한 문제를 푸는 데 사용됨

그래프 전체의 구조에 관한 정보를 얻기 위해 사용되는 깊이 우선 탐색과 달리

너비 우선 탐색은 대개 시작점으로부터 다른 정점들까지의 거리를 구하기 위해 사용됩니다.

따라서 DFS 처럼 모든 정점을 검사하는 작업은 잘하지 않습니다.

 

큐 설정 (STL 사용하지 않을 시)

- 가중치 등으로 중복 방문을 허용하지 않는 경우는

    visited[][] 배열 크기만큼 처리할 수도 있습니다.

- 중복 방문이 허용되지 않는 경우

  상하좌우는 10배, , 이지만 그렇지 않은 문제는 50배, 100배가 필요한 경우도 있음

  우선순위 큐로 구현하는 경우에는 중복방문을 허용하더라도, 

  배열 크기만큼 처리해도 대부분 문제가 풀림

 

관련 문제

[Jungol] 1336 소수와 함께 하는 여행

[Jungol] 1078 저글링 방사능 오염

[Jungol] 1661 미로 탈출 로봇

[Jungol] 2097 지하철

[Jungol] 1840 치즈

[Jungol] 1106 장기

[Jungol] 1462 보물섬

[Jungol] 2058 고돌이 고소미

[Jungol] 1006 로봇

[Jungol] 3008 교통수단 선택하기

[BOJ] 2479 경로 찾기

[BOJ] 4963 섬의 개수

[BOJ] 3184 양

[BOJ] 2606 바이러스

[BOJ] 2583 영역 구하기

[BOJ] 2667 단지 번호 붙이기

[BOJ] 3055 탈출

[BOJ] 17471 게리맨더링

[BOJ] 11724 연결요소의 개수

[BOJ] 1260 DFS와 BFS

[BOJ] 1697 숨바꼭질

[BOJ] 12851 숨바꼭질 2

[BOJ] 6593 상범 빌딩

[BOJ] 15972 물탱크

[BOJ] 6593 상범 빌딩

[BOJ] 2234 성곽

[BOJ] 2536 버스 갈아타기

[BOJ] 14867 물통 

- [BOJ] 2665 미로만들기 

- [SWEA] 9236 곰돌이 (BFS + 이분탐색, Upper Bound)

반응형

댓글