BFS(너비 우선 탐색)
카테고리: Algorithm
BFS 에 대해 알아보자.
다음과 같은 그래프가 있다면 어떤 순서로 탐색하게 될까?
너비 우선 탐색을 통해 탐색 순서를 알아보자.
BFS 란?
BFS (Breadth-First-Search) 는 너비 우선 탐색 이라고 하며, Queue 를 사용한다.
너비 우선 이라는 말은 탐색하고자 하는 노드의 이웃 노드를
모두 방문한 다음에 이웃의 이웃을 방문하는 방식이다.
쉽게 말해, 거리에 따라 단계별로 탐색한다고 볼 수 있다.
참고로 이웃이 다수라면 값이 작은 노드부터 방문한다.
순서는 다음과 같다.
너비 우선 탐색
- Node 0
- Node 1
- Node 4
- Node 5
- Node 3
- Node 2
코드로 구현해보면 어떨까?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int number = 6;
int C[6];
vector<int> V[6];
void bfs(int x)
{
queue<int> Q;
Q.push(x);
C[x] = true;
while(!Q.empty())
{
int y = Q.front();
cout << y << ' ';
Q.pop();
for (int i = 0; i < V[y].size(); i++)
{
int z = V[y][i];
if(!C[z])
{
Q.push(z);
C[z] = true;
}
}
}
}
int main()
{
V[0].push_back(1);
V[0].push_back(4);
V[0].push_back(5);
V[1].push_back(3);
V[1].push_back(4);
V[2].push_back(1);
V[3].push_back(2);
V[3].push_back(4);
bfs(0);
return 0;
}
그래프를 벡터의 로 표현하는 이유는 다음과 같다.
시작 | 도착 | 도착 | 도착 |
---|---|---|---|
0 | 1 | 4 | 5 |
1 | 3 | 4 | X |
이렇게 벡터로 표현한 그래프를 시작 노드부터 반복을 통해 탐색하게 된다.
탐색을 한 노드는 방문처리 C[x] = true
를 해주고 방문처리가 된 노드는 다시는 방문하지 않는다.
이 떄 Queue 를 이용한다는 것을 잊지말자!!
관련문제 BFS 관련문제
댓글남기기