Koder / 박성훈
article thumbnail

www.acmicpc.net/problem/11724

 

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

간단한 DFS 문제

무방향 그래프를 입력을 통해 만들어주고, 그 뒤에 dfs나 bfs 아무거나 하나 골라서 탐색해준다음

갯수만 세주면 된다.

나는 귀찮은관계로 클래식하게 재귀를 이용한 탐색을 사용했다.

 

#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> v[1001];
int visit[1001] = {0};

void dfs(int node){
	if(visit[node] == 1) return;
	else visit[node] = 1;
	
	for(int i=0; i<v[node].size(); i++){
		dfs(v[node][i]);
	}
	return;
}

int main(){
	int n,m;
	int a,b;
	int ans = 0;
	scanf("%d %d", &n, &m);
	for(int i=0; i<m; i++){
		scanf("%d %d", &a, &b);
		v[a].push_back(b);
		v[b].push_back(a);
	}
	
	for(int i=1; i<=n; i++){
		if(visit[i] == 0){
			dfs(i);
			ans++;
		}
	}
	printf("%d", ans);
	return 0;
}

반응형