๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 11724๋ฒˆ : ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ (C++/Silver 2)

devCloud 2022. 9. 29. 04:53
728x90
 

11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

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

www.acmicpc.net

๋ฌธ์ œ

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

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

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


์˜ˆ์ œ ์ž…๋ ฅ

6 5
1 2
2 5
5 1
3 4
4 6

์˜ˆ์ œ ์ถœ๋ ฅ

2

Solution

#include <iostream>
using namespace std;
#define MAX 1001

int N, M, u, v, cnt;
int adj[MAX][MAX]; //์ธ์ ‘ํ–‰๋ ฌ ๋ฆฌ์ŠคํŠธ
bool visited[MAX]; 

void DFS(int n){
    visited[n] = true; //๋ฐฉ๋ฌธ ํ‘œ์‹œ
    for(int i=1; i <= N; i++){
    //์—ฐ๊ฒฐ๋œ ์š”์†Œ ์ค‘ ๋ฐฉ๋ฌธ ์•ˆ ํ–ˆ์œผ๋ฉด ํƒ์ƒ‰ํ•˜๊ธฐ
        if(adj[n][i] == 1 && visited[i] == 0){
            DFS(i);
        }
    }
    
}
int main() {
    cin >> N >> M;
    for(int i=0; i<M; i++){
        cin >> u >> v;
        adj[u][v] = 1; //์–‘์ชฝ์œผ๋กœ ์—ฐ๊ฒฐ๋ผ์„œ ์ˆœ์„œ ๋ฐ”๊ฟ”์„œ ์ดˆ๊ธฐํ™”
        adj[v][u] = 1;
    }
    //์—ฐ๊ฒฐ ์š”์†Œ ๊ฐœ์ˆ˜ 
    for(int i = 1; i <= N; i++){
        if(visited[i] == 0){
            cnt++;
            DFS(i);
        }
    }
    cout << cnt;
    return 0;
}
728x90