Publish:

태그: , , ,

카테고리:

BFS 에 대해 알아보자.

Graph

다음과 같은 그래프가 있다면 어떤 순서로 탐색하게 될까?
너비 우선 탐색을 통해 탐색 순서를 알아보자.

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 관련문제

방문해 주셔서 감사합니다!😊

업데이트:

댓글남기기