단지번호 붙이기
#include <stdio.h>
/*
7
0 1 1 0 1 0 0
0 1 1 0 1 0 1
1 1 1 0 1 0 1
0 0 0 0 1 1 1
0 1 0 0 0 0 0
0 1 1 1 1 1 0
0 1 1 1 0 0 0
*/
#include<stdio.h>
int N;
int map[100][100] = { 0, };
void dfs(int sero, int garo, int cnt)
{
map[sero][garo] = cnt;
if (sero - 1 >= 0 && map[sero - 1][garo] == 1) {
dfs(sero - 1, garo, cnt); }
if (sero + 1 < N && map[sero + 1][garo] == 1) {
dfs(sero + 1, garo, cnt); }
if (garo - 1 >= 0 && map[sero][garo - 1] == 1) {
dfs(sero, garo - 1, cnt); }
if (garo + 1 < N && map[sero][garo + 1] == 1) {
dfs(sero, garo + 1, cnt); }
}
void main()
{
freopen("input.txt", "r", stdin);
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
scanf("%1d", &map[i][j]);
}
}
int cnt = 1;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (map[i][j] == 1)
{
cnt++;
dfs(i, j, cnt);
}
}
}
int Area[100] = { 0, };
int tmp = cnt - 1;
int k = 2;
for (int i = 0; i<N; i++)
{
for (int j = 0; j<N; j++)
{
if (map[i][j])
{
Area[map[i][j] - 2]++;
}
}
}
for (int i = 0; i< cnt -2; i++)
{
for (int j = 0; j< cnt-2-i; j++)
{
if (Area[j] > Area[j + 1])
{
int tmp = Area[j + 1];
Area[j + 1] = Area[j];
Area[j] = tmp;
}
}
}
printf("%d\n", cnt-1);
for (int i = 0; i < cnt - 1; i++)
{
printf("%d\n", Area[i]);
}
}
'Algorithm > DFS' 카테고리의 다른 글
DFS 정복!! 레벨 별 (0) | 2016.06.22 |
---|---|
예산 관리 (0) | 2016.06.18 |
정올 더하기 (0) | 2016.06.17 |
단지번호 붙이기 - 정올 1695번 (2) | 2016.02.25 |
NQueen - 정올 1889번 (0) | 2016.02.16 |