Atlantis--POJ 1151

1、题目类型:计算几何、离散化、扫描法。

2、解题思路:(1)根据输入记录每个矩形的位置,用Coor[i][4] 记录;(2)对已形成的点分别根据横纵坐标进行离散化;(3)扫描获得矩形的总面积。

3、注意事项:注意程序实现过程中,横竖坐标的记录与调用。

4、实现方法:

#include<iostream>
#include
<algorithm>
using namespace std;

int n,cnt,Ca;
int XY[210][210];
double Coor[110][4];
double X[210],Y[210];

void Init()
{
int i;
cnt
=0;
memset(XY,
0,sizeof(XY));
for(i=0;i<n;i++)
{
cin
>>Coor[i][0]>>Coor[i][1]>>Coor[i][2]>>Coor[i][3];
X[cnt]
=Coor[i][0];
Y[cnt]
=Coor[i][1];
cnt
++;
X[cnt]
=Coor[i][2];
Y[cnt]
=Coor[i][3];
cnt
++;
}
sort(X,X
+cnt);
sort(Y,Y
+cnt);
}

void Solve()
{
int i,j,k;
int i1,i2,j1,j2;
for(k=0;k<n;k++)
{
for(i1=0;i1<cnt;i1++)
{
if(X[i1]==Coor[k][0])
break;
}
for(i2=0;i2<cnt;i2++)
{
if(X[i2]==Coor[k][2])
break;
}
for(j1=0;j1<cnt;j1++)
{
if(Y[j1]==Coor[k][1])
break;
}
for(j2=0;j2<cnt;j2++)
{
if(Y[j2]==Coor[k][3])
break;
}
for(i=i1;i<i2;i++)
{
for(j=j1;j<j2;j++)
{
XY[i][j]
=1;
}
}
}
double Arae=0.0;
for(i=0;i<cnt;i++)
{
for(j=0;j<cnt;j++)
Arae
+=XY[i][j]*(X[i+1]-X[i])*(Y[j+1]-Y[j]);
}
printf(
"Test case #%d\n",Ca);
printf(
"Total explored area: %.2f\n\n",Arae);
}

int main()
{
Ca
=0;
while(cin>>n && n)
{
Init();
Ca
++;
Solve();
}
return 0;
}

 

posted @ 2010-09-29 15:25  勇泽  阅读(323)  评论(0编辑  收藏  举报