728x90
백준 11724 연결 요소의 개수
문제
방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.
출력
첫째 줄에 연결 요소의 개수를 출력한다.
제출
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
static ArrayList<Integer>[] A;
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());
A = new ArrayList[n + 1];
visited = new boolean[n + 1];
for (int i = 1; i < n + 1; i++) {
A[i] = new ArrayList<Integer>();
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int s = Integer.parseInt(st.nextToken());
int e = Integer.parseInt(st.nextToken());
A[s].add(e);
A[e].add(s);
}
int count = 0;
for (int i = 1; i < n + 1; i++) {
if (!visited[i]) {
count++;
DFS(i);
}
}
System.out.println(count);
}
static void DFS(int v) {
if (visited[v]) {
return;
}
visited[v] = true;
for (int i : A[v]) {
if (visited[i] == false) {
DFS(i);
}
}
}
}
예제
6 5
1 2
2 5
5 1
3 4
4 6
6 8
1 2
2 5
5 1
3 4
4 6
5 4
2 4
2 3
결과
11724번: 연결 요소의 개수
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주
www.acmicpc.net
728x90
'JAVA > 백준' 카테고리의 다른 글
[Java] 백준 13023 ABCDE - 깊이 우선 탐색(3) (0) | 2022.11.07 |
---|---|
[Java] 백준 2023 신기한 소수 - 깊이 우선 탐색(2) (0) | 2022.11.06 |
[Java] 백준 10989 수 정렬하기 3 - 기수 정렬 (0) | 2022.11.04 |
[Java] 백준 1517 버블 소트 - 병합 정렬(2) (1) | 2022.11.03 |
[Java] 백준 2751 수 정렬하기 2 - 병합 정렬(1) (0) | 2022.11.02 |
댓글