파게로그

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

콤퓨타 왕왕기초/PS

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

파게 2020. 12. 30. 21:18

문제 링크: 11724번 연결 요소의 개수

https://www.acmicpc.net/problem/11724

 

BFS 또는 DFS를 평범하게 구현하여 해결할 수 있는 문제이다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

public class Main {
    /*
    static void dfs(ArrayList<Integer>[] graph, boolean[] visit, int cur) {
        visit[cur] = true;

        for (int n : graph[cur])
            if (!visit[n])
                dfs(graph, visit, n);
    }
     */

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int node;
        int vertex;
        int[] temp;

        temp = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        node = temp[0];
        vertex = temp[1];

        ArrayList<Integer>[] graph = new ArrayList[node+1];
        for (int i = 1; i <= node; i++)
            graph[i] = new ArrayList<Integer>();

        for (int i = 0; i < vertex; i++) {
            int u;
            int v;
            temp = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();

            u = temp[0];
            v = temp[1];

            graph[u].add(v);
            graph[v].add(u);
        }

        boolean[] visit = new boolean[node+1];
        int cnt = 0;

        for (int i = 1; i <= node; i++) {
            if (visit[i]) continue;

            cnt++;
            Queue<Integer> q = new LinkedList<>();
            q.offer(i);
            visit[i] = true;

            while (!q.isEmpty()) {
                int cur = q.poll();
                for (int n : graph[cur])
                    if (!visit[n]) {
                        visit[n] = true;
                        q.offer(n);
                    }
            }
        }

        /*
        boolean[] visit = new boolean[node+1];
        int cnt = 0;

        for (int i = 1; i <= node; i++) {
            if (!visit[i]) {
                cnt++;
                dfs(graph, visit, i);
            }
        }
         */

        System.out.println(cnt);
    }
}

 

'콤퓨타 왕왕기초 > PS' 카테고리의 다른 글

[백준 7562번] 나이트의 이동  (0) 2020.12.30
[백준 4963번] 섬의 개수  (0) 2020.12.30
[백준 7576번] 토마토  (0) 2020.12.30
[백준 2178번] 미로 탐색  (0) 2020.12.30
[백준 1012번] 유기농 배추  (0) 2020.12.29
Comments