https://www.acmicpc.net/problem/2667
이런것도 한번에 못 푸는 나는 진짜똥멍청이인가부다....
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 | #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<vector> #include<iostream> #include<algorithm> using namespace std; int N = 0; int cnt = 0; int arr[26][26] = { 0 }; int visited[26][26] = { 0 }; int dx[4] = { 0,0,1,-1 }; int dy[4] = { 1,-1,0,0 }; void dfs(int _x, int _y) { visited[_x][_y] = 1; cnt++; for (int i = 0; i < 4; i++) { int mx = _x + dx[i]; int my = _y + dy[i]; if (mx >= 0 && mx < N && my >= 0 && my < N && arr[mx][my] && !visited[mx][my]) { dfs(mx, my); } } return; } int main(void) { vector<int> num; char s[26] = { 0 }; scanf("%d", &N); for (int i = 0; i < N; i++) { scanf("%s", s); for (int j = 0; j < N; j++) { arr[i][j] = *(s + j) - '0'; } } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (arr[i][j] && !visited[i][j]) { dfs(i, j); num.push_back(cnt); cnt = 0; } } } sort(num.begin(), num.end()); printf("%d\n", num.size()); for (int i = 0; i < num.size(); i++) { printf("%d\n", num[i]); } return 0; } | cs |
'Problem > DFS' 카테고리의 다른 글
[백준알고리즘] 2583번 영역 구하기 (0) | 2018.11.26 |
---|---|
[백준알고리즘] 4963번 섬의 개수 (0) | 2018.11.25 |
[백준알고리즘] 2636번 치즈 (0) | 2018.11.18 |
[백준알고리즘] 2606번 바이러스 (0) | 2018.11.15 |
[백준알고리즘] 2638번 치즈 (0) | 2018.11.05 |