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 | #include <stdio.h> #include <queue> using namespace std; int house[30][30] = { 0 }; int val, n; priority_queue<int> q; void find(int i, int j); int main() { scanf("%d", &n); getchar(); for (int i = 1; i <= n; i++) { char tmp[30]; for (int j = 1; j <= n; j++) { scanf("%c", &tmp[j]); house[i][j] = (int)tmp[j] - 48; } getchar(); } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (house[i][j] == 1) { val = 1; house[i][j] = 0; find(i, j); q.push(-val); } } } printf("%d\n", q.size()); int size = q.size(); for (int i = 1; i <= size; i++) { printf("%d\n", -q.top()); q.pop(); } } void find(int i, int j) { house[i][j] = 0; 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); } 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' 카테고리의 다른 글
11403 경로찾기 (0) | 2019.07.30 |
---|---|
1012 유기농 배추 (0) | 2019.07.29 |
1260 DFS와 BFS (0) | 2019.07.29 |
(잘못된풀이) 누가 더 클까 더블릿 (0) | 2019.03.01 |
달팽이 더블릿 (0) | 2019.02.28 |