我搜索了很多,但是没有找到一个适用于这种情况的好答案。我们有一些水平或垂直的矩形,它们可以随意放置在页面上。它们可以重叠,也可以有共同的边缘,或者彼此分离。我想找到一个O(nlogn)的算法,可以找到这些矩形的周长和面积。这些图片可能会让问题更加清晰。我认为区间树可能会有所帮助,但我不确定如何使用。
insert_interval(y1, y2);
get_total_length();
int area = 0;
FOR(triange=0->N)
{
Area = area trianlges[triangle];
FOR(int j = triangle+1 -> N)
{
area-= inter(triangle , j)
}
}
return area;
int inter(tri a,tri b)
{
if ( ( min(a.highY ,b.highY) > max(a.lowerY, b.lowerY) ) && ( min(a.highX ,b.highX) > max(a.lowerX, b.lowerX) ) )
return ( min(a.highY ,b.highY) - max(a.lowerY, b.lowerY) ) * ( min(a.highX ,b.highX) - max(a.lowerX, b.lowerX) )
else return 0;
}