给定矩形的坐标,将它们连接起来形成从头到尾的路径

问题描述

有很多矩形;每个都有左下角和右上角的坐标。 它们要么重叠(完全或部分),要么至少与另一边接触。

我正在寻找如何通过按顺序跟踪每个矩形来提出从开始到结束块的跟踪。让我们说它在开始和结束块都有一个标识符(坐标),这可以说跟踪已经开始和结束。

在下图中,我需要进行跟踪,以便获得按顺序编号为 1 、 2 、 3 、 4 、 5 的矩形。 请让我知道解决这个问题的最佳方法是什么?是否有适合此问题陈述的可用模块?

而且,接下来的事情是,如果有多个端点,如何得出从单个开始到多个结束块跟踪的所有路径?

Path tracing

解决方法

您可以构建一个图形来模拟这个问题。 对于每个矩形,考虑一个节点,如果这个矩形与任何其他矩形有连接,则它们的代表节点有一条连接它们的边。
然后你可以使用深度优先搜索遍历这个图,看看是否有从起始三角形到终止三角形的路径。

triangles = [(2,3,5,6),(5,6,10,11)]
adj = []
for i in range(len(triangles)):
    adj.append([])
    triangle1 = triangles[i]
    for j in range(i):
        triangle2 = triangles[j]
        if overlap(triangle1,triangle2):
            adj[i].append(j)
            adj[j].append(i)
start = 0 # Any triangle that has overlap with starting point
end = 1 # Any triangle that has overlap with ending point
dfs(start,end): # A DFS function to check is there a path from start to end,and prints the path found.

该算法具有O(N^2) 复杂度。其中 n 是三角形的数量。