728x90
반응형
1. Breadth First Search (BFS, 너비 우선 탐색
1. 완전 탐색 알고리즘
- 모든 경우의 수를 탐색하는 알고리즘
2. 시작점에서 가까운 점부터 탐색하는 방식
- 개미굴에 물을 부어서 물이 점점 안 쪽으로 스며들어가는 방식과 비슷하다.
2. 장점
1) 출발노드에서 목표 노드까지의 최단 길이 경로를 보장한다.
3. 단점
1) 경로가 매우 길 경우에는 탐색 기지가 급격히 증가하여 많은 기억 공간을 필요로 한다.
4. 구현
- Queue를 통해 구현
- 아래 3가지 구조로 나눌 수 있다.
1) 시작점 셋팅
2) 현재 방문 노드를 Queue에서 pop하기
3) 다음으로 방문할 노드 Queue에 삽입
#include <iostream>
#include <vector>
#include <queue>;
using namespace std;
bool visited[11];
vector<int> graph[11];
void bfs(int start_node)
{
// 1. 시작점 세팅
queue<int> q;
q.push(start_node);
visited[start_node] = true; // 방문 여부 체크
while (!q.empty())
{
// 2. 현재 방문 노드를 Queue에서 pop하기
int current_node = q.front();
q.pop();
cout << current_node << " ";
// 3. 다음으로 방문할 노드 Queue에 삽입
for (int index = 0; index < graph[current_node].size(); index++) {
int next_node = graph[current_node][index];
if (visited[next_node]) continue;
visited[next_node] = true;
q.push(next_node);
}
}
}
int main() {
// graph 생성
graph[1].push_back(2);
graph[1].push_back(3);
graph[2].push_back(4);
graph[2].push_back(5);
graph[3].push_back(6);
graph[3].push_back(7);
graph[5].push_back(8);
// BFS (넓이 우선 탐색) 알고리즘
bfs(1);
return 0;
}
5. BFS(너비 우선 탐색) 문제 모음집
https://www.acmicpc.net/problem/14940
https://www.acmicpc.net/problem/21736
https://www.acmicpc.net/problem/2206
https://www.acmicpc.net/problem/14502
https://www.acmicpc.net/problem/12851
https://www.acmicpc.net/problem/16946
728x90
'알고리즘' 카테고리의 다른 글
[알고리즘] 누적 합 (0) | 2024.04.11 |
---|---|
[알고리즘] 그리디 알고리즘 (1) | 2024.04.06 |
[알고리즘] DFS (깊이 우선 탐색) (1) | 2024.04.03 |
[알고리즘] 배낭 문제 (1) | 2024.04.03 |
[기타] 주어진 수열에서 선택한 3개의 값의 합이 0에 가장 가깝게 선택하는 방법 (1) | 2023.10.03 |