[백준 / C언어] 11724번: 연결 요소의 개수 (DFS로 풀이)

728x90
728x90

슬라이드1.JPG

https://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

etc-image-1
etc-image-2

 

난이도: solved.ac 실버 2

 

알고리즘 분류


그래프 탐색, DFS(깊이 우선 탐색), BFS(너비 우선 탐색)

 

구현


노드를 방문하면 visited에서 해당 노드의 값을 1로 바꾸고, 해당 노드와 연결된 다른 노드로 DFS 함수를 통해 탐색하였다.

그리고 더 이상 연결된 노드가 없을 때까지 DFS 함수를 재귀호출하도록 하였다.

연결된 노드가 더 이상 없으면 cnt 값을 1 증가시켜 주었다.

 

코드


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAX 1001
int coord[MAX][MAX];
int visited[MAX];
int N, M;
void DFS(int V);
int main() {
int a, b, i;
scanf("%d %d", &N, &M);
for (i = 0; i < M; i++) {
scanf("%d %d", &a, &b);
coord[a][b] = 1;
coord[b][a] = 1;
}
int cnt = 0;
for (i = 1; i <= N; i++) {
if (!visited[i]) {
DFS(i);
cnt++;
}
}
printf("%d", cnt);
return 0;
}
void DFS(int V) {
visited[V] = 1;
for (int i = 1; i <= N; i++)
if (coord[V][i] && !visited[i])
DFS(i);
}
반응형