코드


#include <iostream>
#include <vector>
#include <queue>

using namespace std;

/* 그래프 => 총 노드의 수: 9 (0 포함)*/
vector<int> graph[9];

void bfs(int node){
    queue<int> que; // bfs큐
    bool visited[9]; // 방문체크 

    // 첫 노드를 큐에 삽입하고, 방문표시, 출력
    que.push(node);
    visited[node] = true;
    printf("%d ", node);

    // 큐에 값이 빌 때까지 반복
    while(!que.empty()){
        // 큐에 첫번째 노드를 넣고, 삭제
        int r = que.front();
        que.pop();

        // 해당 노드의 인접노드를 탐색
        for (int i = 0; i < graph[r].size(); i++){
            int n = graph[r][i];

            // 방문하지 않은 노드라면 큐에 삽입하고, 방문표시, 출력
            if(!bfsVisited[n]) {
                que.push(n);
                visited[n] = true;
                printf("%d ", n);
            }
        }
    }
}

int main(void)
{
    /* 그래프 정의 */
    graph[0].push_back(1);

    graph[1].push_back(0);
    graph[1].push_back(2);
    graph[1].push_back(3);

    graph[2].push_back(1);
    graph[2].push_back(4);

    graph[3].push_back(1);
    graph[3].push_back(2);
    graph[3].push_back(4);
    graph[3].push_back(5);

    graph[4].push_back(2);
    graph[4].push_back(3);

    graph[5].push_back(3);
    graph[5].push_back(6);
    graph[5].push_back(7);

    graph[6].push_back(5);
    graph[6].push_back(8);

    graph[7].push_back(5);

    graph[8].push_back(6);

    bfs(0);
}

풀이


너비 우선 탐색(BFS)

1. 첫 노드를 큐에 삽입한다

2. 큐의 첫번째 노드의 인접노드를 탐색한다  

3. 인접노드를 큐에 삽입하고, 방문체크 +출력

4. 큐가 빌 때까지 2, 3을 반복한다 

'알고리즘 > 그래프' 카테고리의 다른 글

플로이드 와샬(Floyd Warshall)  (0) 2022.02.09
깊이 우선 탐색(DPS : Depth First Search)  (0) 2022.01.28

+ Recent posts