私の問題は、8 クイーンズ パズルに非常によく似ています。
たとえば、次のような 2 次元配列 (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
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 ) .......
私の問題は、斜めの衝突をチェックすることです。それを行うより良い方法はありますか???