我试图提出一种能够将环形线圈展开成2D阵列的算法,这样我就可以使用X,Y坐标来解决各个点,并以一致的方式遍历网格。
我的问题是我没有大量的信息可供使用。我有一个组成圆环的唯一识别点的列表,但整数标识符是随机的和非连续的。我有一个与每个点相关联的邻居列表,但该列表是一个无序集。
不知何故,我需要选择一个起始点(可能是标识符整数最低的点),然后以这样的方式遍历整个网格,以便我使用2D数组来描述每个点的标识符,因为它们& #39;重新布置在环形表面上。
我最好如何解决这样的问题?
答案 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的邻居所识别的这些邻居。这很容易:
满足条件的第一对:
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