문제출처: 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 |