You will be fine

<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






반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기