문제출처: https://www.acmicpc.net/problem/11724


문제

방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.


입력

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.


출력

첫째 줄에 연결 요소의 개수를 출력한다.


풀이

dfs,bfs는 개념을 이해하고 계속 문제를 풀어보는게 좋은 학습방법인 것 같습니다.  시작노드(1번노드)에서 dfs를 시작하면 연결된 노드들까지 모두 탐색이되고, 연결되지않은 노드들도 똑같이 dfs를돌려서 20행~27행 의 dfs를 몇번돌렸는지 세주면됩니다.


코드

#include<iostream>
using namespace std;
int visited[1001];
int graph[1001][1001];
void dfs(int x);
int main()
{
	cin.tie(0);
	cin.sync_with_stdio(false);
	int n, m;
	int u, v;
	int ans = 0;
	cin >> n >> m;
	for (int i = 0; i < m; i++)
	{
		cin >> u >> v;
		graph[u][v] = 1;
		graph[v][u] = 1;
	}
	for (int i = 1; i <= n; i++)
	{
		if (!visited[i]) 
		{
			dfs(i);
			ans++;
		}
	}
	cout << ans << endl;
}
void dfs(int x)
{
	visited[x] = 1;
	for (int i = 1; i <= 1000; i++)
	{
		if (!visited[i] && graph[x][i])
			dfs(i);
	}
}


결과




'문제풀이(BOJ) > DFS,BFS' 카테고리의 다른 글

[백준 7576] 토마토 (BFS)  (0) 2020.01.15
[백준 2573] 빙산  (0) 2019.12.14
[백준 10026] 적록색약  (0) 2019.12.14
[백준 2468] 안전 영역  (0) 2019.12.14
[백준 2583] 영역 구하기  (0) 2019.12.14

+ Recent posts