#include <stdio.h>
#include <string.h>
int w, h, paper[102][102]={},a[102]={},min;
void view()
{
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
printf("%d ",paper[i][j]);
}
printf("\n");
}
printf("\n");
}
int DFS(int y,int x,int k){
if(paper[y][x]!=0)
return 0;
a[k]++;
paper[y][x]=1;
if(y>0)
DFS(y-1,x,k);
if(x>0)
DFS(y,x-1,k);
if(y<h-1)
DFS(y+1,x,k);
if(x<w-1)
DFS(y,x+1,k);
}
int main(){
int x,y,x1,y1,k,n;
scanf("%d %d %d",&h,&w,&n);
for(k=0;k<n;k++){
scanf("%d %d %d %d",&x,&y,&x1,&y1);
for(int j=x;j<x1;j++)
for(int i=y;i<y1;i++)
paper[i][j]=1;
}
for(y=0,k=0;y<h;y++){
for(x=0;x<w;x++){
if(paper[y][x]==0){
DFS(y,x,k);
k++;
}
}
}
printf("%d\n",k);
for(int j=0;j<k;j++){
min=102;
a[102]=10000;
for(int i=0;i<k;i++){
if(a[i]<a[min])
min=i;
}
printf("%d ",a[min]);
a[min]=10000;
}
}
top of page

실제 작동 상태를 확인하려면 라이브 사이트로 이동하세요.
수정: 2023년 10월 21일
DFS 영역 구하기
DFS 영역 구하기
댓글 0개
좋아요
댓글(0)
bottom of page