← Back to List

2583번: 영역 구하기 ↗

Solutions

C++14
1.5 KB | 1490 chars
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int M,N,K,ar[110][110],Cnt,check[100];
struct st{
	int xx,yy;
};
int main()
{
	scanf("%d %d %d",&M,&N,&K);
	for(int x=0; x<K; x++)
	{
		int a,b,c,d;
		scanf("%d %d %d %d",&a,&b,&c,&d);
		for(int X=a; X<c; X++)
		{
			for(int Y=b; Y<d; Y++)
			{
				ar[X][Y]=1;
			}
		}
	}
	/*for(int y=0; y<M; y++)
	{
		for(int x=0; x<N; x++)
		{
			printf("%d",ar[x][y]);
		}printf("\n");
	}*/
	for(int x=0; x<N; x++)
	{
		for(int y=0; y<M; y++)
		{
			if(ar[x][y]==0)
			{
				//printf("%d %d\n",x,y);
				st Z;
				Z.xx=x; Z.yy=y;
				queue <st> qu;
				qu.push(Z);
				int Cmt=0;
				while(!qu.empty())
				{
					st A;
					A=qu.front();
					if(A.yy+1<M&&ar[A.xx][A.yy+1]!=1)
					{
						st B;
						B.xx=A.xx; B.yy=A.yy+1;
						qu.push(B);
						ar[B.xx][B.yy]=1;
						Cmt++;
					}
					if(A.yy-1>-1&&ar[A.xx][A.yy-1]!=1)
					{
						st B;
						B.xx=A.xx; B.yy=A.yy-1;
						qu.push(B);
						ar[B.xx][B.yy]=1;
						Cmt++;
					}
					if(A.xx+1<N&&ar[A.xx+1][A.yy]!=1)
					{
						st B;
						B.xx=A.xx+1; B.yy=A.yy;
						qu.push(B);
						ar[B.xx][B.yy]=1;
						Cmt++;
					}
					if(A.xx-1>-1&&ar[A.xx-1][A.yy]!=1)
					{
						st B;
						B.xx=A.xx-1; B.yy=A.yy;
						qu.push(B);
						ar[B.xx][B.yy]=1;
						Cmt++;
					}
					qu.pop();
				}
				if(Cmt==0) Cmt=1;
				check[Cnt]=Cmt;
				Cnt++;
			}
		}
	}
	sort(check,check+Cnt);
	printf("%d\n",Cnt);
	for(int x=0; x<Cnt; x++) printf("%d ",check[x]);
}