[DFS]백준11724번 연결 요소의 개수

업데이트:

백준 11724

_2021-01-27__2 32 22

연결 요소 (Connected Component) 란 연결된 그래프의 개수이다.

예를 들어 1-2-3 5-6 이 있다면, (1-2-3), (5-6) 은 각각 연결 요소 이기 때문에 연결 요소는 총 두 개이다.

만약 1-2-3-4-5 가 있다면, 연결 요소는 1이다.

DFS 나 BFS를 모두 이용할 수 있는 문제이다.

DFS 나 BFS 모두 탐색 알고리즘이기 때문에, 그래프가 연결되어 있다면 그래프를 처음부터 끝까지 순회한다. (순회의 순서는 다르지만)

따라서 전체 노드에 대해 반복문으로 방문하지 않은 노드에 대해서만 DFS, BFS를 수행하고, 순회한 노드(정점)을 표시한 뒤 DFS나 BFS 가 종료될 때만 count를 올려주면 쉽게 답을 구할 수 있다.

#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>

using namespace std;

vector<int> adj[1001];
bool visited[1001] = {false,};
void dfs(int n);
int main(){
    int N, M;
    cin >> N >> M;

    for(int i=0;i<M;i++){
        int one, two;
        cin >> one >> two;

        adj[one].push_back(two);
        adj[two].push_back(one);
    }
    int answer =0;
    for(int i=1;i<=N;i++){
        if(!visited[i]){
            answer++;
            visited[i] = true;
            dfs(i);
        }
    }
    cout << answer << endl;
}

void dfs(int n){
    visited[n] = true;
    for(int i=0;i<adj[n].size();i++){
        if(!visited[adj[n][i]]){
        visited[adj[n][i]] = true;
        dfs(adj[n][i]);    
        }
    }
}

카테고리:

업데이트:

댓글남기기