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

728x90
728x90

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

 

난이도: 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);
}
반응형