[C/C++]백준 11724

 

백준 11724 - 연결 요소의 개수 (실버2)

11724 문제 링크

방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성해보자
DFS또는 BFS알고리즘을 이용하면 쉽게 풀 수 있는 문제다.
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <cstring>
#include <stack>
#include <queue>
#include <deque>
using namespace std;
int n, m, v;
int vis[1010];
queue <int> q;
int a, b;
vector <int> adj[1005];

void bfs(int node) {
    vis[node] = 1;
    q.push(node);
    while (!q.empty()) {
        int now = q.front();
        q.pop();
        for (int i = 0; i < adj[now].size(); i++) {
            int next = adj[now][i];
            if (!vis[next]) {
                vis[next] = 1;
                q.push(next);
            }
        }
    }
}
int main(void) {
    scanf("%d %d", &n, &m);
    int count = 0;
    for (int i = 1; i <= m; i++) {
        cin >> a >> b;
        adj[a].push_back(b);
        adj[b].push_back(a); //양방향 그래프이다
    }
    for (int i = 1; i <= n; i++) {
        if (!vis[i]) { //방문하지 않은 노드인 경우 BFS탐색을 한다.
            bfs(i);
            count++;
        }
    }
    printf("%d\n", count);
    return 0;
}