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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <stdio.h> #include <queue> #include <string.h> using namespace std; int house[55][55] = { 0 }; int val, n; void find(int i, int j); int main() { int t; scanf("%d", &t); while (t--) { int m, n, k; scanf("%d %d %d", &m, &n, &k); priority_queue<int> q; for (int i = 1; i <= k; i++) { int a, b; scanf("%d %d", &a, &b); house[b][a] = 1; } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (house[i][j] == 1) { val = 1; house[i][j] = 0; find(i, j); q.push(-val); } } } printf("%d\n", q.size()); for (int i = 0; i <= 55; i++) { memset(house[i], 0, sizeof(int) * 55); } } } void find(int i, int j) { house[i][j] = 0; if (i>=1 && house[i - 1][j] == 1) { val++; house[i - 1][j] == 0; find(i - 1, j); } if (j >= 1 && house[i][j - 1] == 1) { val++; house[i][j - 1] == 0; find(i, j-1); } if (house[i+1][j] == 1) { val++; house[i + 1][j] == 0; find(i + 1, j); } if (house[i][j+1] == 1) { val++; house[i][j + 1] == 0; find(i, j+1); } return; } | cs |
'알고리즘 > DFS' 카테고리의 다른 글
| 11724 연결요소의 갯수 (0) | 2019.07.30 |
|---|---|
| 11403 경로찾기 (0) | 2019.07.30 |
| 2667 단지번호 붙이기 (0) | 2019.07.29 |
| 1260 DFS와 BFS (0) | 2019.07.29 |
| (잘못된풀이) 누가 더 클까 더블릿 (0) | 2019.03.01 |