没有合适的资源?快使用搜索试试~ 我知道了~
矩形的并(算法)
5星 · 超过95%的资源 需积分: 42 21 下载量 47 浏览量
2012-01-06
09:46:15
上传
评论 2
收藏 2KB TXT 举报
温馨提示
试读
3页
在 X-Y 坐标平面上,给定多个矩形,它们的边分别与坐标轴平行。请计算它们的并的面积。 输入格式 输入第一行为一个整数 n,1<=n<=100,表示矩形的数量。 接下来有 n 行,每行包括四个数:x1,y1,x2,y2 (0<=x1<x2<=100000;0<=y1<y2<=100000),用空格分开,不一定为整数。 (x1,y1)表示一个长方形的左下顶点坐标,(x2,y2)表示右上顶点坐标。 输出格式 n个矩形的并的面积,保留两位小数。 输入样例 2 0 0 2 2 1 1 3 3 输出样例 7.00 Hint 此题没能用上递归、分治或其他等一系列方法。以下为推荐思路,鼓励自行思考别的方法。 第一题本为练笔,但我挑选的此题似乎实现起来麻烦。 对不住大家了!若实在觉得繁琐的可跳过此题。:( 但,练练手总没坏处滴 :) 多个矩形面积重叠没有规律,难以直接求解或用上递归的思路。 只能从矩形重叠的情况入手,进行局部相加。 1)将所有矩形的左右边界都投影到X轴上,形成各个区间 2)从左向右计算每个区间,将落在该区间内的矩形进行面积统计 3)将每个区间计算的面积再相加
资源推荐
资源详情
资源评论
#include <stdio.h>
#include <set>
using namespace std;
typedef struct ls
{
double l, r;
double y;
int UpOrDown;
}ls;
int par(ls L[], int low, int high) {
L[0] = L[low];
double pivotkey = L[low].y;
while(low < high) {
while(low < high && L[high].y <= pivotkey) --high;
L[low] = L[high];
while(low < high && L[low].y >= pivotkey) ++low;
L[high] = L[low];
}
L[low] = L[0];
return low;
}
void qsort(ls L[], int low, int high) {
if(low < high) {
double pivotloc = par(L, low, high);
qsort(L, low, pivotloc - 1);
qsort(L, pivotloc + 1, high);
}
}
#include <set>
using namespace std;
typedef struct ls
{
double l, r;
double y;
int UpOrDown;
}ls;
int par(ls L[], int low, int high) {
L[0] = L[low];
double pivotkey = L[low].y;
while(low < high) {
while(low < high && L[high].y <= pivotkey) --high;
L[low] = L[high];
while(low < high && L[low].y >= pivotkey) ++low;
L[high] = L[low];
}
L[low] = L[0];
return low;
}
void qsort(ls L[], int low, int high) {
if(low < high) {
double pivotloc = par(L, low, high);
qsort(L, low, pivotloc - 1);
qsort(L, pivotloc + 1, high);
}
}
资源评论
- SCAU_Xxm2013-11-27不错,测试数据能通过。
- li819016052013-11-23程序可以运行。没错!非常好!
ivan214624872
- 粉丝: 0
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功