假设你有一个NxM维的矩阵。例如,一个4x4的矩阵:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
每个单元格都有八个相邻的单元格。 例如,单元格5的相邻单元格包括:0、1、2、4、6、8、9、10。
0 1 2
4 5 6
8 9 10
但是,通过绕过矩阵也可以找到相邻的单元格,因此单元格7的相邻单元格为2、3、0、5、4、10、11、8。
2 3 | 0
6 7 | 4
10 11| 8
您可以同样地将其包裹在顶部和底部。
如果随机选择一个点(p),是否有简单的方法来找到所有八个相邻单元格的值? 到目前为止,我想出了这个列表,其中m是矩阵的宽度(在我们的例子中为4)。
adjacentcells = [p+1, p-1, p+m, p-m, p+m-1, p+m+1, p-m-1, p-m+1]
for value in adjacentcells:
if value < 0:
value = value + len(matrix)
if value >= len(matrix)
value = value % len(matrix)
adjacentlist.append(value)
然而,当你选择角落中的一个单元格时,它会返回7个正确的相邻值和一个错误的单元格。有人能指出我的问题在哪里吗?
*由于某些复杂(愚蠢)原因,我将矩阵存储为字符串,这就是为什么我可以使用len(matrix)并得到16的原因。
m
代表什么? - Code-Apprenticep==15
产生的结果是[0, 14, 3, 11, 2, 4, 10, 12]
,应该得到[0, 14, 3, 11, 2, 8, 10, 12]
。 - Robᵩ