<Algorithm> 29. 11724번 연결요소의 개수
by BFine반응형
1. 11724번 연결요소의 개수
DFS 문제, 영역의 개수 구하는 문제와 동일한 방식
주의 할 점은 방향성이 없다는 것은 간선은 하나로 봐야하고 (1 3),(2 3) 이렇게 들어올떄 1-3-2 를 하나로 인식하는 지를 확인해야한다.
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 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class Main { static boolean[] visited; static int count; public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; st = new StringTokenizer(br.readLine()); int V = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); visited = new boolean[V]; ArrayList<Edge>[] graph = new ArrayList[V]; for(int i = 0; i < V; i++) graph[i] = new ArrayList<Edge>(); for(int i = 0; i < M ; i++) { st = new StringTokenizer(br.readLine()); int v = Integer.parseInt(st.nextToken())-1; int m = Integer.parseInt(st.nextToken())-1; graph[m].add(new Edge(v)); graph[v].add(new Edge(m)); // 방향성 제거 } for(int i = 0; i < V ; i++) { if(!visited[i]) { dfs(i, graph); count++; } } System.out.println(count); } public static void dfs(int vertax, ArrayList<Edge>[] graph) { visited[vertax] = true; for(Edge e : graph[vertax]) { if(!visited[e.adjVertax]) { dfs(e.adjVertax, graph); } } } } class Edge{ int adjVertax; public Edge(int adjVertax) { this.adjVertax = adjVertax; } } | cs |
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 31. 1946번 신입사원 (0) | 2018.08.04 |
---|---|
<Algorithm> 30. 1012번 유기농 배추 (0) | 2018.08.03 |
<Algorithm> 28. 10974번 모든순열 (0) | 2018.08.03 |
<Algorithm> 27. 4673번 셀프넘버 (0) | 2018.08.02 |
<Algorithm> 26. 1010번 다리놓기 (0) | 2018.08.02 |
블로그의 정보
57개월 BackEnd
BFine