연결 요소의 개수
풀이
- 원래는 유니온 파인드를 생각했다.
- 하지만 문제의 유형은 DFS, 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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.StringTokenizer; public class Main { static InputStreamReader isr; static BufferedReader br; static OutputStreamWriter osw; static BufferedWriter bw; static StringTokenizer st; static ArrayList<ArrayList<Integer>> list = null; static int[]visited = null; static int N = 0; static int M = 0; public static void main(String[] args) throws IOException { isr = new InputStreamReader(System.in); br = new BufferedReader(isr); osw = new OutputStreamWriter(System.out); bw = new BufferedWriter(osw); st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); visited = new int[N + 1]; Arrays.fill(visited, 0); list = new ArrayList<ArrayList<Integer>>(); for(int i = 0; i <= N; i++) { list.add(new ArrayList<Integer>()); } for(int i = 0; i < M; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); list.get(a).add(b); list.get(b).add(a); } int count = 0; for(int i = 1; i <= N; i++) { if(visited[i] == 1) { continue; } visited[i] = 1; count += 1; dfs(i); } bw.write(count + "\n"); bw.flush(); bw.close(); br.close(); } private static void dfs(int start) { for(int i = 0; i < list.get(start).size(); i++) { int end = list.get(start).get(i); if(visited[end] == 1) { continue; } visited[end] = 1; dfs(end); } } } | cs |
'Problem Solving & Algorithm > BOJ ' 카테고리의 다른 글
20190206 4963번 : 섬의 개수 (0) | 2019.02.06 |
---|---|
20190206 1987번 : 알파벳 (0) | 2019.02.06 |
20190204 1009번 : 분산처리 (0) | 2019.02.04 |
20190204 1010번 : 다리 놓기 (0) | 2019.02.04 |
20190126 1068번 : 트리 (0) | 2019.01.26 |