ex)
- 1- 2 인 경우, 인접 리스트[1] 에 '2' 저장 and 인접 리스트[2]에 '1' 저장.
import java.io.*;
import java.util.*;
public class Main{
static boolean[] visited;
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
int node = Integer.parseInt(str[0]);
int edge = Integer.parseInt(str[1]);
ArrayList<Integer>[] li = new ArrayList[node + 1]; // 인접 리스트
visited = new boolean[node + 1]; // 방문 배열
int linkedFactor = 0;
// 인접 리스트 초기화
for(int i=1; i <= node; i++){
li[i] = new ArrayList<Integer>();
}
// 인접 리스트에 그래프 값 대입
for(int i=0; i < edge; i++){
str = br.readLine().split(" ");
int u = Integer.parseInt(str[0]);
int v = Integer.parseInt(str[1]);
li[u].add(v);
li[v].add(u);
}
br.close();
// 방문 여부 확인 후 dfs 호출
for(int i=1; i <= node; i++){
if(!visited[i]){
linkedFactor++;
dfs(li, i);
}
}
System.out.println(linkedFactor);
}
// 깊이 우선 탐색
static void dfs(ArrayList<Integer>[] li,int node){
if(visited[node])
return;
visited[node] = true;
if(li[node].isEmpty())
return;
for(int j = 0; j < li[node].size(); j++){
int idx = li[node].get(j);
if(!visited[idx])
dfs(li,idx);
}
}
}