본문 바로가기
Algorithm(BOJ, C)/Graph

[백준_11724] 연결 요소의 개수 c

by kurooru 2024. 11. 17.
문제

풀이과정

풀이

 

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define EXIT_SUCCESS    0

int n, m, cnt = 0;

void dfs(bool** connection, bool* visited, int x)
{
    visited[x] = true;
    for (int i = 0; i < n; i++) {
        if (connection[x][i] && !visited[i]) {
            dfs(connection, visited, i);
        }
    }
}

int main ()
{   
    // 0) n, m 입력
    scanf("%d %d", &n, &m);
    
    // 1) connetion, visited 준비
    bool** connection = (bool **) malloc (sizeof(bool*) * n);
    for (int i = 0; i < n; i++) {
        connection[i] = (bool *) calloc (n, sizeof(bool));
    }
    bool* visited = (bool* ) calloc (n, sizeof(bool));

    // 2) connection 입력
    int u, v;
    for (int i = 0; i < m; i++) {
        scanf("%d %d", &u, &v);
        u--;
        v--;
        connection[u][v] = true;
        connection[v][u] = true;
    }
    
    // 3) dfs 시작
    for (int i = 0; i < n; i++) {
        if (!visited[i]) {
            cnt++;
            dfs(connection, visited, i);
        }
    }

    // 4) 출력
    printf("%d", cnt);

    // 5) 메모리 해방
    for (int i = 0; i < n; i++) {
        free(connection[i]);
    }
    free(connection);
    free(visited);

    return EXIT_SUCCESS;
}

 

'Algorithm(BOJ, C) > Graph' 카테고리의 다른 글

[백준_11725] 트리의 부모 찾기 c  (0) 2024.12.07
[백준_1697] 숨바꼭질 c  (0) 2024.11.24
[백준_11403] 경로 찾기 c  (0) 2024.11.23