我的问题非常类似于八个女王之谜.
我有二维数组(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]]
并用数学方法求解,用另一个(x1,y1)< - >(x2,y2)检查"1"的每个位置,
如果x1 == x2
或y1 == y2
we have a collision!
不检查:
x2 == x1 + z; y2 == y1 + z; x2 == x1 - z; y2 == y1 - z;
(???)
其中z是+/-那个 ( x1+z in 0..N ) and ( y1+z in 0..N ) .......
我的问题是检查对角线碰撞,有更好的方法吗?
一种可能的方案:
def collision(x1, y1, x2, y2): return x1 == x2 or y1 == y2 or abs(x1-x2) == abs(y1-y2)
即如果两个点位于同一水平行,相同垂直行或相同对角线(垂直距离==水平距离),则存在碰撞.