Sangwon Coding

연결 요소의 개수 본문

알고리즘/DFS, BFS

연결 요소의 개수

SW1 2019. 11. 7. 20:17

문제

방향 없는 그래프가 주어졌을 때, 연결 요소 (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.*;
import java.util.*;

public class Main {

	static int[][] graph;
	static boolean visited[];
	static int N;
	static int M;

	public static void dfs(int i) { // DFS
		visited[i] = true;

		for (int j = 1; j <= N; j++) {
			if (graph[i][j] == 1 && visited[j] == false) {
				dfs(j);
			}
		}
	}

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		M = sc.nextInt();
		graph = new int[N + 1][N + 1];
		visited = new boolean[N + 1];
		int a, b;

		for (int i = 1; i <= M; i++) {
			a = sc.nextInt();
			b = sc.nextInt();

			graph[a][b] = graph[b][a] = 1;
		}

		for (int j = 1; j <= N; j++) {
			visited[j] = false;
		}

		int cnt = 0;	// 연결 요소 개수

		for (int k = 1; k <= N; k++) {
			if (visited[k] == false) {	// 방문한적이 없으면 새로운 연결 요소
				dfs(k);
				cnt++;
			}
		}

		System.out.println(cnt);
	}
}

 

문제출처

https://www.acmicpc.net/problem/11724

'알고리즘 > DFS, BFS' 카테고리의 다른 글

토마토  (0) 2019.11.14
섬의 개수  (0) 2019.11.11
유기농 배추  (0) 2019.11.11
미로 탐색  (0) 2019.11.07
DFS, BFS  (0) 2019.11.07
Comments