티스토리 뷰
이번 문제는 제가 포스팅한 DFS를 참고하면 좋을 거 같아요. (http://tiger1710.tistory.com/7)
이 문제는 탐색을 하면서 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 | #include <stdio.h> #include <stdbool.h> #define MAX 1001 int G[MAX][MAX]; bool visited[MAX]; int N, M; int cnt; void dfs(int k) { visited[k] = true; for (int i = 1; i <= N; i++) { if (visited[i] != false || G[k][i] == 0) continue; dfs(i); } } int main(void) { scanf("%d%d", &N,&M); for (int i = 0; i < M; i++) { int u, v; scanf("%d%d", &u, &v); G[u][v] = 1; G[v][u] = 1; } for (int i = 1; i <= N; i++) { if (!visited[i]) { dfs(i); cnt++; } } printf("%d\n", cnt); return 0; } | cs |
5~8:모든 변수를 전역변수로 정의했습니다.(0으로 초기화 하기위해)
29~34:간선의 갯수만큼 dfs함수를 호출해 줍니다.
30:이미 방문했다면 dfs함수를 호출하지 않고
32:한번 호출할때마다 갯수를 하나씩 올렸습니다.
'Coding > acmicpc' 카테고리의 다른 글
백준 10451:순열 사이클 (0) | 2018.02.28 |
---|---|
백준 2583:영역 구하기 (0) | 2018.02.27 |
백준 2606:바이러스 (0) | 2018.02.23 |
백준 10026:적록색약 (0) | 2018.02.23 |
백준 9012번:괄호 (4) | 2018.02.23 |