https://www.acmicpc.net/problem/11724
DFS를 활용해서 연결 요소의 개수를 파악해준다. 연결된 클러스터의 개수를 파악하는 문제라고 생각하면 된다.
DFS가 몇번 실행되는지 파악해주면되고, 무방향 그래프라는 것을 인지하고 인접행렬의 형태로 입력을 받아준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #pragma warning(disable :4996) #include<iostream> using namespace std; int grp[1001][1001], n, m; //1-indexed bool vis[1001]; void dfs(int cur) { for (int i = 1; i <= n; i++) { if (grp[cur][i] == 1 && !vis[i]) { vis[i] = true; dfs(i); } } } int main(void) { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for (int i = 1; i <= m; i++) { int src, dst; cin >> src >> dst; grp[src][dst] = 1; grp[dst][src] = 1; //방향이 없으므로 } int ret = 0; for (int i = 1; i <= n; i++) { if (!vis[i]) { //printf("%d에서 실행\n", i); vis[i] = true; dfs(i); ret++; //dfs의 실행 횟수가 곧 연결 요소의 수 } } cout << ret; return 0; } | cs |
'알고리즘 문제 풀이 > 백준 온라인 저지' 카테고리의 다른 글
백준 1389번: 케빈 베이컨의 6단계 법칙 (C++) (0) | 2019.09.25 |
---|---|
백준 2644번: 촌수계산 (C++) (0) | 2019.09.25 |
백준 11403번: 경로 찾기 (C++) (0) | 2019.09.25 |
백준 1152번: 단어의 개수 (C++) (0) | 2019.09.20 |
백준 2193번: 이친수 (C++) (0) | 2019.09.19 |