有n个点。 n = 7.而且我有关于连接点的信息。
import numpy as np
connect = np.array([[0, 0], [0, 4], [0, 5], [1, 1], [2, 2], [3, 3],
[4, 0],[4, 4],[5, 0], [5, 5], [6, 6]])
例如[0,1]表示连接点0和点1。我怎样才能将点组成组,以便在组内连接点。在此示例中,[0,4],[0,5]已连接,但[4,5]未连接,但它们仍属于同一组。 结果应该看起来像
groups = [[0, 4, 5], [1], [2], [3], [6]]
修改 这是我目前的做法。
data = np.full((7, 7), 0)
for c in connect:
data[c[0], c[1]] = 1
for c in connect:
data[c[0], :] = data[c[0], :] + data[:, c[1]]
data[:, c[1]] = data[c[0], :] + data[:, c[1]]
data[np.where(data != 0)] = 1
result = np.vstack({tuple(row) for row in data})
print ([np.where(row != 0)[0] for row in result])
答案 0 :(得分:1)
您可以使用两种类似的方法来解决此问题:
最初将每个点视为一组自己的点,对于每对连接点,如果节点位于不同的集合中,则尝试组合该集合。如果你不熟悉不相交的集合,请参考上面的链接,因为它可能会有点长。
组的数量将是剩余的组数,成员在一组中描述。
将每个点视为节点,将连接视为边。您的目标是找到图形的连接组件(整个点)。每个连接的组件都是一个组,连接组件的成员是同一组的成员。
有关连接组件(https://en.wikipedia.org/wiki/Connected_component_(graph_theory))的更多信息,您可以使用BFS或DFS(https://en.wikipedia.org/wiki/Graph_traversal)遍历图表。