C++ 给定一个矩形区域和一组矩形,检查它们是否覆盖整个区域
这里的所有值都是实数,最多有两个浮点数 假设我们有一个矩形区域,C++ 给定一个矩形区域和一组矩形,检查它们是否覆盖整个区域,c++,algorithm,C++,Algorithm,这里的所有值都是实数,最多有两个浮点数 假设我们有一个矩形区域,100.0by75.0 然后给你一组矩形。我怎样才能检查这些统一的矩形是否覆盖了整个区域 如果我们有 (0,0,50,75) (0,0,50,75) (50,0,50,75) 显然,这并没有发生,因为它只覆盖了一半的面积。如果我们有 (0,0,50,75) (0,0,50,75) (50,0,50,75) 这样就行了,因为两个矩形都将有效地覆盖整个(100,75) 我试过什么 我尝试(没有成功)制作一个多维布尔数组: boo
100.0
by75.0
然后给你一组矩形。我怎样才能检查这些统一的矩形是否覆盖了整个区域
如果我们有
(0,0,50,75)
(0,0,50,75)
(50,0,50,75)
显然,这并没有发生,因为它只覆盖了一半的面积。如果我们有
(0,0,50,75)
(0,0,50,75)
(50,0,50,75)
这样就行了,因为两个矩形都将有效地覆盖整个(100,75)
我试过什么
我尝试(没有成功)制作一个多维布尔数组:
bool area[10000][7500];
这些是面积的尺寸,乘以100,这样我就不用处理浮点了。然后我迭代每个矩形(它们的值也乘以100),对于其中的每个“像素”,我将布尔值转换为true
最后,我检查该区域中的所有布尔值是否true
这被证明是非常愚蠢的。你能帮我找到更好的方法吗?我认为这样的策略会奏效:
我认为这样的策略会奏效:
从概念上讲,与500-内部服务器错误非常相似的方法可以避免最后一步隐含的O(n^2)搜索:
如果找到合适的间隙,则不包括原始间隙。如果你不知道,那就是。顺便说一句,这就是span缓冲的工作原理。一种概念上非常类似于500内部服务器错误的方法,它避免了最后一步隐含的O(n^2)搜索:
- 让我们把初始的矩形集称为R
- 初始化第二组矩形,这些矩形最初包含一个覆盖整个区域的矩形
- 对于R中的每个矩形:
- 对于S中的每个矩形:
- 如果两个R和S矩形相交,则根据需要将S矩形替换为覆盖S矩形左侧非相交部分的尽可能多的矩形(如果我没有弄错的话,则为0到4)
- 继续在S上迭代,注意不要为刚刚添加的新S矩形计算任何内容(我们已经知道它与当前R矩形不相交)
- 继续在R上迭代,这次考虑新的S矩形,直到:
- S中没有剩余的矩形,在这种情况下,R矩形确实覆盖了整个区域
- 或者,您迭代了所有R矩形,但仍然剩下S个矩形,在这种情况下,您的R矩形不会覆盖整个区域
- 对于S中的每个矩形:
- 让我们把初始的矩形集称为R
- 初始化第二组矩形,这些矩形最初包含一个覆盖整个区域的矩形
- 对于R中的每个矩形:
- 对于S中的每个矩形:
- 如果两个R和S是矩形的
- 对于S中的每个矩形: