백준 11724번)연결 요소의 개수

4133 단어 DFSDFS

문제

방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.

출력

첫째 줄에 연결 요소의 개수를 출력한다.

구현

package 신규아이디추천;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {
	static StringBuilder builder = new StringBuilder();

	public static void DFS(int[][] graph, int start_vertex) {
		Stack<Integer> will_visit = new Stack<>();
		visited.add(start_vertex);
		will_visit.push(start_vertex);
		while (will_visit.isEmpty() == false) {
			Integer current_vertex = will_visit.pop();
			for(int i=1; i<graph.length;i++)
			{
				if(graph[current_vertex][i]==1&&!visited.contains(i))
				{
					will_visit.add(i);
					visited.add(i);
				}
			}
		}
	}
	static HashSet<Integer> visited = new HashSet<>();
	static int areaCount(int[][] graph, int start_vertex) {

		int count = 0;
		for (int i=1; i<graph.length;i++)
		{
			if(!visited.contains(i))
			{
				DFS(graph,i);
				count++;
			}
		}
		return count;
	}

	public static void main(String[] args) throws IOException {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
		int N = Integer.parseInt(tokenizer.nextToken());
		int M = Integer.parseInt(tokenizer.nextToken());
		int[][] arr = new int[N+1][N+1];
		int x, y;
		while (M-- > 0) {
			tokenizer = new StringTokenizer(reader.readLine());
			x = Integer.parseInt(tokenizer.nextToken());
			y = Integer.parseInt(tokenizer.nextToken());
			arr[x][y] = 1;
			arr[y][x] = 1;

		}
		System.out.println(areaCount(arr,1));
	}
}

좋은 웹페이지 즐겨찾기