获取 NxN 网格蟒蛇的邻居



我正在尝试制作一种算法来创建矩阵P,对于NxN网格,所有具有都用值X(在矩阵P中(注释。

例如,我有一个 3x3 网格:

0   1   2
3   4   5
6   7   8

(0( 的邻居是 (1( 和 (3(。(7(的邻居是(4(、(6(和8等。因此,矩阵 P 应转换为:

[1, X, 0, 0, 0, 0, 0, 0, 0],
[X, 1, X, 0, X, 0, 0, 0, 0],
[0, X, 1, 0, 0, X, 0, 0, 0],
[X, 0, 0, 1, X, 0, X, 0, 0],
[0, X, 0, X, 1, X, 0, X, 0],
[0, 0, X, 0, X, 1, 0, 0, X],
[0, 0, 0, X, 0, 0, 1, X, 0],
[0, 0, 0, 0, X, 0, X, 1, X],
[0, 0, 0, 0, 0, X, 0, X, 1],

我让它在 1D 中工作:

for i in range(N):
for j in range(N):
if i == j:
p[i][j] = 1
else:
if j + 1 == i:
p[i][j] = X
elif j - 1 == i:
p[i][j] = X

但是,我毫无头绪地试图将其转换为 2D 方式。有谁知道如何做到这一点?

P 中的每个"行">

实际上代表 3x3 网格中的"行"和"col"。要从 P 中的行号转换为网格坐标,需要两行代码:

current_row = i // N
current_col = i % N

第一行是整数除法,这意味着它向下舍入到最接近的整数。第二行使用取模运算符,这是除以i时的余数N

同样,P 中的每个"col"都转换为other_row并在 3x3 网格中other_col

一旦知道行和列,其余代码就非常简单了:

N = 3
p = [['0' for col in range(N*N)] for row in range(N*N)]
for i in range(N*N):
for j in range(N*N):
current_row = i // N
current_col = i % N
other_row = j // N
other_col = j % N
if current_row == other_row and current_col == other_col:
p[i][j] = '1'
elif current_row == other_row and abs(current_col - other_col) == 1:
p[i][j] = 'X'
elif current_col == other_col and abs(current_row - other_row) == 1:
p[i][j] = 'X'
for i in range(N*N):
for j in range(N*N):
print p[i][j],
print

相关内容

  • 没有找到相关文章

最新更新