import java.io.*;
import java.util.*;
public class Main {
static List<Integer>[] graph;
static boolean[] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
graph = new ArrayList[N+1];
for(int i = 1; i <= N; i++){
graph[i] = new ArrayList<>();
}
for(int i = 0; i < M; i++){
st = new StringTokenizer(br.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
connect(u,v);
}
visited = new boolean[N+1];
int cnt = 1;
bfs(1);
for(int i = 1; i <= N; i++){
if(!visited[i]) {
bfs(i);
cnt++;
}
}
System.out.println(cnt);
}
static void connect(int u, int v){
graph[u].add(v);
graph[v].add(u);
}
static void bfs(int V){
Queue<Integer> around = new ArrayDeque<>();
visited[V] = true;
around.offer(V);
while(!around.isEmpty()){
int v = around.poll();
for(int next : graph[v]){
if(!visited[next]) {
visited[next] = true;
around.offer(next);
}
}
}
}
}
원래는 큐로 연결되지 않은 노드들을 확인하고 카운트하기 위해 bfs를 사용했지만 의도와는 다르게 코드를 썼다..
더 쉬운 코드
int count = 0;
for (int i = 1; i <= N; i++) {
if (!visited[i]) {
dfs(i);
count++;
}
}
public static void dfs(int node) {
visited[node] = true;
for (int next : graph.get(node)) {
if (!visited[next]) {
dfs(next);
}
}
}
보완점