블로그 이미지
shadowchaser
이곳 저곳 이것 저것

calendar

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

Notice

2016. 2. 14. 23:28 Algorithm/DFS

단지번호 붙이기


#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
posted by shadowchaser