728x90
반응형
반응형
1. 문제
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
2. 풀이
- 백준 1012 유기농 배추와 유사하게 풀이하였다.
- 연결된 노드는 true로 처리하여 카운트되지 않게 하였다.
- 정점과 정점이 이어져있는 것을 확인하기 위해 1로 배열에 표기해주었다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
static int N,M;
static int[][] map;
static boolean[] visited;
static int result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//br = new BufferedReader(new StringReader(src));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new int[N+1][N+1];
visited = new boolean[N+1];
for(int i =0; i<M;i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
map[a][b]=map[b][a]=1;
}
for(int i =1; i<=N;i++) {
if(!visited[i])
result++;
dfs(i);
}
System.out.println(result);
}
static void dfs(int start) {
visited[start] = true;
for(int i =1; i<=N;i++) {
if(map[start][i]==1 && !visited[i]) {
dfs(i);
}
}
}
static String src =
"6 5\r\n" +
"1 2\r\n" +
"2 5\r\n" +
"5 1\r\n" +
"3 4\r\n" +
"4 6";
}
반응형
'알고리즘 > 그래프' 카테고리의 다른 글
| [백준 16929] Two Dots(Java) (0) | 2020.12.22 |
|---|---|
| [백준 13023] ABCDE(Java) (0) | 2020.12.22 |
| [백준 1012] 유기농 배추(Java) (0) | 2020.12.22 |
| [백준 5567] 결혼식(Java) (0) | 2020.12.22 |
| [백준 2644] 촌수계산(Java) (0) | 2020.12.22 |