Advertisement
jdragon

2667 - 단지번호붙이기

Mar 27th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.89 KB | None | 0 0
  1. #include <cstdio>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. int off_y[] = {-1, 1, 0, 0};
  8. int off_x[] = {0, 0, -1, 1};
  9.  
  10. int N, houseNum;
  11. int jido[25][25];
  12. vector<int> ans;
  13. bool visited[25][25];
  14.  
  15. void dfs(int y, int x){
  16.     houseNum++;
  17.     visited[y][x] = true;
  18.     for(int i=0; i<4; i++){
  19.         int yi = y + off_y[i], xi = x + off_x[i];
  20.         if(yi<0 || xi<0 || yi>=N || xi>=N || !jido[yi][xi]) continue;
  21.         if(!visited[yi][xi] && jido[yi][xi])
  22.             dfs(yi, xi);
  23.     }
  24. }
  25.  
  26. int main(){
  27.     scanf("%d", &N);
  28.     for(int i=0; i<N; i++)
  29.         for(int j=0; j<N; j++)
  30.             scanf("%1d", &jido[i][j]);
  31.  
  32.     for(int i=0; i<N; i++)
  33.         for(int j=0; j<N; j++)
  34.             if(!visited[i][j] && jido[i][j]){
  35.                 houseNum = 0;
  36.                 dfs(i, j);
  37.                 ans.push_back(houseNum);
  38.             }
  39.    
  40.     sort(ans.begin(), ans.end());
  41.  
  42.     printf("%d\n", ans.size());
  43.     for(int i=0; i<ans.size(); i++)
  44.         printf("%d\n", ans[i]);
  45.  
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement