https://www.acmicpc.net/problem/11724
인접리스트와 DFS를 사용하여 문제를 해결했습니다.
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector <int> v[1001];
bool check[1001];
int m;
void dfs(int node) {
check[node] = true;
for (int i = 0; i < v[node].size(); i++) {
int next = v[node][i];
if (check[next] == false) {
//불필요한 연산을 생략 함으로써 메모리 낭비를 막는다.
dfs(next);
}
}
}
int main() {
int n, a, b, result = 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 (check[i] == false) {
dfs(i);
result++;
}
}
printf("%d\n", result);
}
- 혼잣말
…