프로그래밍/문제
단지번호 붙이기
lee ho jun
2017. 1. 2. 13:58
반응형
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 | #include <stdio.h> #include <algorithm> #define N 25 int map[N+1][N+1]; int sol[N*N]; int mapsize; int flag; void input() { scanf("%d",&mapsize); for (int i = 0; i < mapsize; i++) { for (int j = 0; j < mapsize; j++) { scanf("%1d", &map[i][j]); } } } void ser(int i , int j) { sol[flag]++; map[i][j] = 0; if (map[i - 1][j] == 1 && i-1>=0) ser(i - 1, j); if (map[i+1][j] == 1 && i+1 <=N) ser(i + 1, j); if (map[i][j+1] == 1 && j+1 <=N) ser(i, j+1); if (map[i][j-1] == 1 && j-1 >=0) ser(i, j-1); } int main() { input(); for(int i = 0 ; i<mapsize ; i++) for (int j = 0; j < mapsize; j++) { if (map[i][j] == 1) { ser(i, j); flag++; } } std::sort(sol, sol + flag); printf("%d\n", flag); for (int i = 0; i < flag; i++) printf("%d\n", sol[i]); return 0; } | cs |
반응형