仅使用点邻居

时间:2015-11-10 12:23:48

标签: arrays algorithm

我试图提出一种能够将环形线圈展开成2D阵列的算法,这样我就可以使用X,Y坐标来解决各个点,并以一致的方式遍历网格。

我的问题是我没有大量的信息可供使用。我有一个组成圆环的唯一识别点的列表,但整数标识符是随机的和非连续的。我有一个与每个点相关联的邻居列表,但该列表是一个无序集。

不知何故,我需要选择一个起始点(可能是标识符整数最低的点),然后以这样的方式遍历整个网格,以便我使用2D数组来描述每个点的标识符,因为它们& #39;重新布置在环形表面上。

我最好如何解决这样的问题?

1 个答案:

答案 0 :(得分:0)

如果您有2D环形线圈,并且您希望将他与#34;邻居"数据,你可以通过这个方法做到这一点。

Toroid是对称的,因此你可以先拿出你想要的任何一点,然后把它放到数组中。我会把它放在阵列的中间,但你甚至可以从角落开始,没关系。

对于5 x 5环形,您可以创建5 x 5阵列

X - X - X - X - X
X - X - X - X - X
X - X - X - X - X
X - X - X - X - X
X - X - X - X - X

你从列表中取出一个并将他放入中间

X - X - X - X - X
X - X - X - X - X
X - X - O - X - X
X - X - X - X - X
X - X - X - X - X

现在你想找到邻居F的邻居所识别的这些邻居。这很容易:

  1. 找到O
  2. 的所有邻居
  3. 在他们之间创建对
  4. 如果节点对有两个相同的邻居,请记住它们。其中一个是O(第一个),第二个是新的F。
  5. 满足条件的第一对:

    X - X - X - X - X
    X - X - N - F - X
    X - X - O - N - X
    X - X - X - X - X
    X - X - X - X - X
    

    你可以得到4对(每个方向),但由于结构对称,你可以拿一个并把它放到那个数组

    X - X - X - X - X
    X - X - O - O - X
    X - X - O - O - X
    X - X - X - X - X
    X - X - X - X - X
    

    现在你终于将环形线放置在某个东西上,然后你可以开始用它来填充它。

    看看这些" N"节点

    X - X - X - X - X
    X - X - O - O - X
    X - X - O - O - X
    X - X - N - N - X
    X - X - X - X - X
    

    只有两个确切的节点满足这些条件。你已经有了#34; O"数组中的节点,因此你知道它们的位置。如果我将重要的(在此步骤中)标记为1和2,它看起来像这样

    X - X - X - X - X
    X - X - O - O - X
    X - X - 1 - 2 - X
    X - X - N - N - X
    X - X - X - X - X
    

    只有两个未显示的节点满足此要求:" N1连接到1; N2连接到2; N1和N2连接"。因此,你找到它们并把它们放进去。

    X - X - X - X - X
    X - X - O - O - X
    X - X - O - O - X
    X - X - O - O - X
    X - X - X - X - X
    

    您可以使用此方法完成整行

    X - X - O - O - X
    X - X - O - O - X
    X - X - O - O - X
    X - X - O - O - X
    X - X - O - O - X
    

    现在你可以向另一个方向做同样的事情

    X - X - O - O - X
    O - O - O - O - O
    O - O - O - O - O
    X - X - O - O - X
    X - X - O - O - X
    

    然后另一个

    X - X - O - O - X
    O - O - O - O - O
    O - O - O - O - O
    O - O - O - O - O
    O - O - O - O - O
    

    最后

    O - O - O - O - O
    O - O - O - O - O
    O - O - O - O - O
    O - O - O - O - O
    O - O - O - O - O