본문 바로가기
알고리즘/코딩 - 백준

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

by 주남2 2019. 9. 26.
반응형

문제

방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.

출력

첫째 줄에 연결 요소의 개수를 출력한다.

 

생각

각 정점이 이어진 것을 입력으로 주어졌으므로, 인접행렬이나 인접리스트를 이용하면 된다. 나는 인접행렬을 이용한데다 scanner를 이용해서 시간이 오래걸렸다. 인접행렬을 사용하면 희소 행렬이 나올 가능성이 높아지기 때문에 메모리도 많이 먹고 시간도 더 걸릴 수 있다.

 

후에 bfs나 dfs를 실행하고, 함수의 실행 횟수를 출력해주면 된다.

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
 
public class Main {
    static int n;
    static int m;
    static int[][] map;
    static boolean[] visited;
    static int result = 0;
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        n = sc.nextInt();
        m = sc.nextInt();
        
        map = new int[n][n];
        visited = new boolean[n];
        
        for(int i=0; i<m; i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            
            map[a-1][b-1= 1;
            map[b-1][a-1= 1;
        }
        
        for(int i=0; i<n; i++) {
            if(!visited[i]) {
                bfs(i);
                result++;
            }
        }
        
        System.out.println(result);
        
    }
    
    public static void bfs(int start) {
        Queue<Integer> q = new LinkedList<Integer>();
        q.add(start);
        visited[start] = true;
        
        while(!q.isEmpty()) {
            int v = q.poll();
            
            for(int i=0; i<n; i++) {
                if(map[v][i] == 1 && !visited[i]) {
                    q.add(i);
                    visited[i] = true;
                }
            }
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 
반응형