如何将点连接成组

时间:2017-02-07 00:41:22

标签: python algorithm

有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])

1 个答案:

答案 0 :(得分:1)

您可以使用两种类似的方法来解决此问题:

  1. 不相交集(更多信息和实施:https://en.wikipedia.org/wiki/Disjoint-set_data_structure
  2. 最初将每个点视为一组自己的点,对于每对连接点,如果节点位于不同的集合中,则尝试组合该集合。如果你不熟悉不相交的集合,请参考上面的链接,因为它可能会有点长。

    组的数量将是剩余的组数,成员在一组中描述。

    1. 图形
    2. 将每个点视为节点,将连接视为边。您的目标是找到图形的连接组件(整个点)。每个连接的组件都是一个组,连接组件的成员是同一组的成员。

      有关连接组件(https://en.wikipedia.org/wiki/Connected_component_(graph_theory))的更多信息,您可以使用BFS或DFS(https://en.wikipedia.org/wiki/Graph_traversal)遍历图表。