社区
数据结构与算法
帖子详情
矩形覆盖问题
nandizhu
2008-09-19 02:59:28
在XY坐标系上给定对角线坐标(x1,y1),(x2,y2)确定一个平行XY轴的矩形区域
再在XY坐标系中输入N个矩形区域(均以对角线坐标表示)
判断源矩形区域是否被N个矩形区域覆盖
...全文
777
10
打赏
收藏
矩形覆盖问题
在XY坐标系上给定对角线坐标(x1,y1),(x2,y2)确定一个平行XY轴的矩形区域 再在XY坐标系中输入N个矩形区域(均以对角线坐标表示) 判断源矩形区域是否被N个矩形区域覆盖
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhangjinpengchina
2008-09-21
打赏
举报
回复
给你一个自己写的矩形求交的程序,希望对你有用
矩形求交
#include <iostream>
using namespace std;
#define MAX(a, b) ((a >= b) ? a : b)
#define MIN(a, b) ((a <= b) ? a : b)
struct INTERVAL //区间
{
float left;
float right;
};
struct RECT //矩形
{
float left;
float right;
float top;
float bottom;
};
bool interval_intersect(INTERVAL t1, INTERVAL t2, INTERVAL &t3) //求区间t1和t2的交(一维)
{
if (t1.right < t2.left || t1.left > t2.right)
return false;
else
{
t3.left = MAX(t1.left, t2.left);
t3.right = MIN(t1.right, t2.right);
return true;
}
}
bool rect_intersect(RECT r1, RECT r2, RECT &r3) //矩形求交(二维)
{
INTERVAL t1, t2, t3, t4, t5, t6;
t1.left = r1.left;
t1.right = r1.right;
t2.left = r2.left;
t2.right = r2.right;
t4.left = r1.top;
t4.right = r1.bottom;
t5.left = r2.top;
t5.right = r2.bottom;
if (interval_intersect(t1, t2, t3) && interval_intersect(t4, t5, t6))
{
r3.left = t3.left;
r3.right = t3.right;
r3.top = t6.left;
r3.bottom = t6.right;
return true;
}
return false;
}
求矩形的交就是区间求交的二维情况,求立方体的交是三维情况,都可以简化为一维情况。
bffeey
2008-09-20
打赏
举报
回复
画个(x1,y1),(x2,y2)的红色矩形
再画N个绿色矩形
然后遍历(x1,y1),(x2,y2)矩形的每个像素点
mathe
2008-09-20
打赏
举报
回复
上面提到的算法基本需要O(N^3)的时间复杂度,不够好。
我们可以检查每个矩形,它落在大矩形内部的边界是不是均被其它矩形覆盖(如果同一个分布在这条边异测的矩形在这条边重合,算覆盖)。
如果是,那么整个大矩形被完全覆盖(唯一的例外是所有小矩形和大矩形不相交)。
上面的思想非常容易用O(N^2)的算法实现。而如果我们事先将所有矩形分别按各边的横众坐标值排序,可能还可以改善算法
大王派我去巡山
2008-09-20
打赏
举报
回复
想错了,重复标记状态,是要O(n^3)
大王派我去巡山
2008-09-20
打赏
举报
回复
mathe说的“检查每个矩形,它落在大矩形内部的边界是不是均被其它矩形覆盖”很有新意。
另外我前面提的算法O(n^2)就可以实现啊,只是要开辟一个n^2大小的空间来记录网格被覆盖的状态。
nandizhu
2008-09-19
打赏
举报
回复
貌似没弄懂
大王派我去巡山
2008-09-19
打赏
举报
回复
假设有n个小矩形,每个小矩形表示为(L[i],T[i])—(R[i],B[i]),1<=i<=n
将所有小矩形的x边界(即L和R)排序得到一个序列:
P1<=P2<=...<=x1<=...<=Pi<=...<=x2<=...<=Pn
同样对小矩形的y边界(T和R)排序也可以得到一个序列:
Q1<=Q2<=...<=y1<=...<=Qi<=...<=y2<=...<=Qn
这就好比拉起了一张大网,大矩形(x1,y1)-(x2,y2)被x=Pi、y=Qi(1<=i<=n)这样的直线分成了很多网格.
每个小矩形都是由若干个相邻的网格拼成的。
下一步就是要遍历所有的小矩形,检查(x1,y1)-(x2,y2)范围内的每个网格是否都被覆盖到了。
medie2005
2008-09-19
打赏
举报
回复
呵呵,叫我干什么啊?
mostovoi1234
2008-09-19
打赏
举报
回复
在平面上有n(n> 3)个点,设其中任意三点被包含在单位圆里,证明:n个点也被包含在单位圆里。
jieao111
2008-09-19
打赏
举报
回复
阿诺快来!mm再次出现
深度优先
矩形
覆盖
C++ 带文件输入输出
深度优先
矩形
覆盖
C++ 带文件输入输出 分享一下,顺便说一下,这个程序的效率不是很高。
矩形
条
覆盖
问题
的贪心算法
矩形
条
覆盖
问题
的贪心算法,非常好的一个算法。
-移动通信基站网络
覆盖
问题
.docx
本文主要研究移动通信基站的
覆盖
问题
,即可将其转化为由若干个圆形面积来无缝
覆盖
一个
矩形
面积的
问题
,题中采用大基站和小基站
覆盖
的方法,即用两种半径分别为1km和0.5km的圆形面积
覆盖
矩形
面积。而圆周为弧线,...
论文《
矩形
条
覆盖
问题
的贪心算法》
论文《
矩形
条
覆盖
问题
的贪心算法》
剑指offer:面试题9.3——
矩形
覆盖
问题
剑指offer:面试题9.3——
矩形
覆盖
问题
题目:我们可以用21的小
矩形
横着或者竖着去
覆盖
更大的
矩形
。请问用n个21的小
矩形
无重叠地
覆盖
一个2*n的大
矩形
,总共有多少种方法? class Solution { public: int rectCover...
数据结构与算法
33,010
社区成员
35,327
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章