#include<stdio.h>
#include<stdlib.h>
int arr[30][30]={0,};
int visited[30][30]={0,};
int index=0;
int count[500]={0};
void dfs(int i,int k){
//printf("i=%d k=%d index=%d count[index]=%d\n",i,k,index,count[index]);
visited[i][k]=1;
count[index]++;
if(arr[i][k-1]==1&&visited[i][k-1]==0)
dfs(i,k-1);
if(arr[i][k+1]==1&&visited[i][k+1]==0)
dfs(i,k+1);
if(arr[i-1][k]==1&&visited[i-1][k]==0)
dfs(i-1,k);
if(arr[i+1][k]==1&&visited[i+1][k]==0)
dfs(i+1,k);
}
int compare(const void *a, const void *b) // 오름차순 비교 함수 구현
{
int num1 = *(int *)a; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴
int num2 = *(int *)b; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴
if (num1 < num2) // a가 b보다 작을 때는
return -1; // -1 반환
if (num1 > num2) // a가 b보다 클 때는
return 1; // 1 반환
return 0; // a와 b가 같을 때는 0 반환
}
int main(void){
int n;
char ch;
scanf("%d ",&n);
for(int i=1;i<=n;i++){
for(int k=1;k<=n;k++){
ch=getchar();
arr[i][k]=ch-48;
}
getchar();
}
for(int i=1;i<=n;i++){
for(int k=1;k<=n;k++){
if(arr[i][k]==1&&visited[i][k]==0){
dfs(i,k);
index++;
}
}
}
qsort(count,index,sizeof(int),compare);
printf("%d\n",index);
for(int i=0;i<index;i++)
printf("%d\n",count[i]);
return 0;
}
배열 입력받을 때 숫자가 아니라 문자로 입력받아야 됐다
1157 : 단어 공부 (0) | 2022.01.06 |
---|---|
[C언어/DFS] 4963 : 섬의 개수 (0) | 2022.01.05 |
2606 : 바이러스 (0) | 2022.01.04 |
1065 : 한수 (0) | 2022.01.03 |
4673 : 셀프 넘버 (0) | 2022.01.03 |