我的问题与八皇后拼图非常相似。
我有二维数组 (N x N),例如,看起来像这样:
0,0,0,0,1 y
0,0,0,0,0 |
0,0,0,0,0 V
0,0,0,1,0
0,0,0,0,0
x->
我正在水平、垂直和对角线检查是否出现 1
\,0,|,0,/
0,\,|,/,0
-,-,1,-,-
0,/,|,\,0
/,0,|,0,\
我正在考虑在列表中只存储“1”的 (x,y) 位置
[[4,0],[3,3]]
并用数学方法解决它,检查“1”的每个位置与另一个 (x1,y1)<->(x2,y2),
如果 x1 == x2
或 y1 == y2
我们有碰撞!
如果没有检查:
x2 == x1 + z;
y2 == y1 + z;
x2 == x1 - z;
y2 == y1 - z;
(???)
其中 z 是 +/- (x1+z in 0..N)和(y1+z in 0..N)......
我的问题是检查对角线碰撞,有更好的方法吗???
最佳答案
一种可能的解决方案:
def collision(x1, y1, x2, y2):
return x1 == x2 or y1 == y2 or abs(x1-x2) == abs(y1-y2)
即如果两个点在同一水平行、同一垂直行或同一对角线上(垂直距离==水平距离),则存在碰撞。
关于python - 检查二维数组(如八皇后拼图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/384874/