NxM 次元の行列があるとします。たとえば、4x4 マトリックス:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
各セルには、隣接する 8 つのセルがあります。たとえば、セル 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) を選択した場合、隣接する 8 つのセルすべての値を見つける簡単な方法はありますか? ここまでで、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 つの正しい値と、誤ったセルが 1 つ返されます。誰かが私が間違っているところを指摘できますか?
*複雑な (ばかげた) 理由から、行列を文字列として格納しているため、len(matrix) を実行して 16 を取得できます。