백준[11724] - 연결 요소의 개수

문제

백준 11724 문제 보기

접근 방법

dfs로 접근해 거의 리니어한 타임에 문제를 풀수 있다. 그 대신 사이클이 있는 경우를 대비해 방문한 노드를 체크하고 방문했을 경우에는 다시 해당 노드로 접근하지 않는다.

코드

#include <iostream>
#include <cstring>
using namespace std;
int N, M;
int map[1001][1001];
int visited[1001];
int cnt;
int dfs(int node) {
visited[node] = 1;
for(int i = 1; i <= N; i++) {
if(map[node][i] && !visited[i]) {
dfs(i);
}
}
return 0;
}
int main() {
cin >> N >> M;
memset(map, 0, sizeof(map));
memset(visited, 0, sizeof(visited));
int r, c;
for(int i = 0; i < M; i ++) {
cin >> r >> c;
map[r][c] = map[c][r] = 1;
}
for(int i = 1; i <= N; i ++) {
if(!visited[i]){
dfs(i);
cnt++;
}
}
cout << cnt;
return 0;
}
Share