其实可以暴力解决
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct { double x1; double y1; double x2; double y2; }Point; Pointsquare[110]; double x[220],y[220]; int num; int comp(const void *a,const void *b); int main() { int n,i,j,k,ex=0; double x1,y1,x2,y2,sum; while(scanf("%d",&n),n!=0) { ex++; num=0; sum=0.; for(i=0;i<n;i++) { scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2); square[i].x1=x1; square[i].y1=y1; square[i].x2=x2; square[i].y2=y2; x[num]=x1; y[num++]=y1; x[num]=x2; y[num++]=y2; } qsort(x,n*2,sizeof(double),comp); qsort(y,n*2,sizeof(double),comp); for(i=0;i<2*n-1;i++) for(j=0;j<2*n-1;j++) { for(k=0;k<n;k++) { if(x[i]>=square[k].x1&&y[j]>=square[k].y1&&x[i+1]<=square[k].x2&&y[j+1]<=square[k].y2) { sum+=(x[i+1]-x[i])*(y[j+1]-y[j]); break; } } } printf("Test case #%d\n",ex); printf("Total explored area: %.2lf\n\n",sum); } return 0; }