Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在给定的矩形列表中找到与特定矩形相邻的所有矩形?_Python_Algorithm_Computational Geometry - Fatal编程技术网

Python 如何在给定的矩形列表中找到与特定矩形相邻的所有矩形?

Python 如何在给定的矩形列表中找到与特定矩形相邻的所有矩形?,python,algorithm,computational-geometry,Python,Algorithm,Computational Geometry,给定一个矩形R1和一组矩形R2,R3,。。。。 如何找到与主矩形R1连接的所有矩形 我不仅需要直接连接到R1的矩形,还需要所有间接连接到R1的矩形。 例如,如果R2连接到R1,而R3连接到R2。R3被认为与R1相连 矩形的形式为(xmin,ymin,xmax,ymax)。 所有矩形都与轴平行。 当矩形重叠或接触时,它们被认为是连接的。 当他们仅仅接触到角落时,他们被认为是没有联系的 例如: ____________ _111________ _11122______ ____22______ _

给定一个矩形R1和一组矩形R2,R3,。。。。 如何找到与主矩形R1连接的所有矩形

我不仅需要直接连接到R1的矩形,还需要所有间接连接到R1的矩形。 例如,如果R2连接到R1,而R3连接到R2。R3被认为与R1相连

矩形的形式为(xmin,ymin,xmax,ymax)。 所有矩形都与轴平行。 当矩形重叠或接触时,它们被认为是连接的。 当他们仅仅接触到角落时,他们被认为是没有联系的

例如:

____________
_111________
_11122______
____22______
____22______
____333333__ 
____22______
__55___4444_
__55___4444_ 
在本例中,R1、R2、R3相互连接。所以我需要返回R1,R2,R3

R4和R5未连接

一个显而易见的解决方案是将每个矩形与O(n^2)进行比较。 但我认为应该有更快的解决方案。 我曾尝试使用区间树实现扫描线算法。但这是一个缓慢的过程。
我需要一个O(n log n)中的解决方案

制作两个列表,一个包含X坐标对象,另一个包含Y坐标对象

对象将包括(坐标、矩形编号以及坐标是对应于最小值还是最大值)

对两个列表进行排序O(nlogn)并遍历任意一个列表。遇到最小坐标时在堆栈中添加矩形,遇到最大坐标时删除矩形。如果将多个矩形添加到一个堆栈中,则将它们添加到一个组中,同时删除一个矩形,该组将对应于所有重叠的矩形。存储这些组的信息。使用其他列表执行相同的步骤。从X和Y列表中获得的组中的公共矩形将是重叠矩形


解决方案是O(nlogn)

这是连续空间还是离散空间?请说明您解决问题的尝试,以及遇到问题的地方。检查。你是指n点还是矩形?但如果这样做,我只会发现重叠的矩形。我还需要触摸屏。在删除矩形之前,进一步检查列表,看看坐标是否相同。如果是,请将其删除并添加到当前组。我想我没有明确指定格式。例如,R1为(1,1,3,2),R2为(4,2,5,6)R3=(4,5,9,5)。我可以在每个xmax上加1,但是R5会被连接。R1的意思是(1,1,3,2)R1的输入(xmin,ymin,xmax,ymax)。