๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐˜š๐˜ญ๐˜ฐ๐˜ธ ๐˜ฃ๐˜ถ๐˜ต ๐˜ด๐˜ต๐˜ฆ๐˜ข๐˜ฅ๐˜บ

[๋ฐฑ์ค€] 11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ - C++ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/๋ฐฑ์ค€

[๋ฐฑ์ค€] 11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ - C++

.23 2021. 12. 22. 22:03
๋ฌธ์ œ

๋ฐฉํ–ฅ ์—†๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์—ฐ๊ฒฐ ์š”์†Œ (Connected Component)์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฐ„์„ ์˜ ์–‘ ๋์  u์™€ v๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ™์€ ๊ฐ„์„ ์€ ํ•œ ๋ฒˆ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฌธ์ œ.

DFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค. 0๋ฒˆ ์ •์ ๋ถ€ํ„ฐ N๊นŒ์ง€ ํ•œ๋ฒˆ์”ฉ DFS๋ฅผ ์‹คํ–‰ํ•˜๋˜, DFS์—์„œ ์ƒˆ๋กœ ์ •์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ ๋งˆ๋‹ค c๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์˜ ์ˆ˜๋ฅผ ์„ธ์ฃผ๊ณ , DFS๊ฐ€ ๋๋‚ฌ์„ ๋•Œ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์˜ ์ˆ˜ c๊ฐ€ ์ด์ „๋ณด๋‹ค ์ฆ๊ฐ€ํ–ˆ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๊ทธ๋ž˜ํ”„๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ count ๋ฅผ 1 ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค.

์ตœ์ข…์ ์œผ๋กœ count์— ๊ธฐ๋ก๋œ ์ˆ˜๊ฐ€ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋œ๋‹ค.

 

์ฝ”๋“œ
#include <cstdio>
#define MAX 1001

using namespace std;

int graph[MAX][MAX] = { 0 };
bool visited[MAX] = { false };

void DFS(int vertex, int V, int& C);

int main(void) {
    int n, m;
    scanf("%d %d", &n, &m);
    
    for(int i = 0; i < m; i++) {
        int a, b;
        scanf("%d %d", &a, &b);
        graph[a][b] = graph[b][a] = 1;
    }

    int c = 0, count = 0, i = 1;
    while(c != n) {
        int temp = c;
        DFS(i, n, c);
        if(temp < c)
            count++;

        i++;
    }
    printf("%d\n", count);
    return 0;
}

void DFS(int vertex, int V, int& c) {
    if(!visited[vertex]){
        visited[vertex] = true;
        c++;
    }
    for(int i = 1; i <= V; i++) {
        if(visited[i] || graph[vertex][i] == 0)
            continue;
        DFS(i, V, c);
    }
}
Comments