공부하는 히욤이

11724번 : 연결 요소의 개수 본문

Algorithm/BaekJoon

11724번 : 연결 요소의 개수

히욤이 2019. 3. 7. 01:30

11724번 : 연결 요소의 개수

문제 출처 : 백준 알고리즘


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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Main_11724 {
    static int[][] map;
    static boolean[] visit;
    static int n;
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());
 
        n = Integer.parseInt(st.nextToken()); //정점의 개수
        int m = Integer.parseInt(st.nextToken()); //간선의 개수
 
        map = new int[n+1][n+1]; //그래프
        visit = new boolean[n+1]; //방문 여부
 
        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
 
            map[x][y] = map[y][x] = 1//무방향 그래프
        }
        int cnt = 0//연결된 갯수
 
        //dfs 하는 수 만큼 
        for (int i = 1; i <= n; i++) { //i번째 정점까지
            if (!visit[i]) { //방문하지 않았으면
                cnt++//갯수 증가
                dfs(i); //다시 dfs
            }
        }
        System.out.println(cnt);
    }
 
    static void dfs(int x) { //x는 정점
        if (visit[x]) { //방문 했을 경우
            return;
        }
        visit[x] = true//방문 하지 않았다면 방문 여부 O
 
        for (int i = 1; i <= n; i++) {
            if (!visit[i]&&map[i][x]==1) { //방문하지 않았을 경우와 그래프가 1인 경우
                dfs(i); //다시 dfs
            }
        }
    }
}
 
cs


'Algorithm > BaekJoon' 카테고리의 다른 글

[BOJ] 1436. 영화감독 숌  (0) 2019.08.03
[BOJ] 2231. 분해합  (0) 2019.08.03
2606번 : 바이러스  (1) 2019.03.07
9498번 : 시험 성적  (0) 2019.02.18
2558번 : A+B  (0) 2019.02.18