방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.
#include <iostream>
#include <vector>
using namespace std;
static int N, M;
static vector<int> graph[1001];
static vector<bool> isVisited(1001);
void dfs(int here) {
isVisited[here] = true;
for (const int& there : graph[here])
if (!isVisited[there]) dfs(there);
}
int solve() {
int ret = 0;
for (int start = 1; start <= N; ++start) {
if (!isVisited[start]) {
dfs(start);
ret++; // DFS 종료하고 리턴될 때 마다 카운팅
}
}
return ret;
}
int main() {
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
cin >> N >> M;
for (int i = 1; i <= M; ++i) {
int start = 0, end = 0;
cin >> start >> end;
graph[start].push_back(end);
graph[end].push_back(start);
}
cout << solve() << '\n';
}