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