티스토리 뷰

Algorithm/BOJ

2667 단지번호 붙이기

henry1214 2018. 3. 3. 06:20

https://www.acmicpc.net/problem/2667



지도를 스캔하면서 단지(연결요소)를 찾고 BFS나 DFS를 이용하여 각 단지마다 집의 수를 세준다.



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
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
 
int n,map[25][25],cnt;
int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};
vector<int> ans;
 
void dfs(int x,int y)
{
    cnt++;
    map[x][y]=0;
    for(int i=0;i<4;i++)
    {
        int nx=x+dx[i],ny=y+dy[i];
        if(nx<0 || nx>=|| ny<0 || ny>=|| !map[nx][ny])
            continue;
        dfs(nx,ny);
    }
}
 
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++for(int j=0;j<n;j++)
        scanf("%1d",&map[i][j]);
    for(int i=0;i<n;i++for(int j=0;j<n;j++)
        if(map[i][j]==1) cnt=0,dfs(i,j),ans.push_back(cnt);
    sort(ans.begin(),ans.end());
    int size=ans.size();
    printf("%d\n",size);
    for(int i=0;i<size;i++)
        printf("%d\n",ans[i]);
    return 0;
}
cs


'Algorithm > BOJ' 카테고리의 다른 글

8006 Connections  (0) 2018.03.05
1854 K번째 최단경로 찾기  (0) 2018.03.05
6593 상범 빌딩  (0) 2018.03.03
1504 특정한 최단 경로  (0) 2018.03.03
1753 최단경로  (0) 2018.03.03
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday