유기농 배추
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include <stdio.h> int t; int m, n, k; int x, y; int ans; int map[50][50]; int dir[4][2] = { {-1,0},{1,0},{0,-1},{0,1} }; void dfs(int x, int y) { map[x][y] = 0; for (int i = 0; i < 4; ++i) { int xx = x + dir[i][0]; int yy = y + dir[i][1]; if (xx < 0 || yy < 0 || xx >= n || yy >= m) continue; if (map[xx][yy] != 1) continue; dfs(xx, yy); } } int main() { scanf("%d", &t); while (t--) { scanf("%d %d %d", &m, &n, &k); ans = 0; for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) map[i][j] = 0; for (int i = 0; i < k; ++i) { scanf("%d %d", &x, &y); map[y][x] = 1; } for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (map[i][j] == 1) { ans++; dfs(i, j); } } } printf("%d\n", ans); } return 0; } | cs |
'알고리즘 > 브루트 포스' 카테고리의 다른 글
백준) 1182 부분집합의 합 (0) | 2018.02.06 |
---|---|
백준) 4963 섬의 개수 (0) | 2018.01.14 |
백준) 2206 벽 부수고 이동하기 (0) | 2018.01.14 |
백준) 3055 탈출 (3) | 2018.01.14 |
백준) 10216 Count Circle Groups (0) | 2017.10.09 |