Моя проблема очень похожа на головоломку «Восемь королев».
У меня есть 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,\
Я думаю о сохранении только (x, y) позиций "1" в списке
[[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 ) .......
Моя проблема - проверка диагонального столкновения, есть ли лучший способ сделать это ???