Это метод кодирования всех направлений в виде массивов - каждой пары di[i],dj[i]
представляет собой другое направление.
Если мы представим, что у нас есть кусок в точке x, y, и мы хотим добавить к его x и значение y, чтобы переместить его в соседнее место, 1,0 - восток, -1,0 - запад, 0,1 юг, 0, -1 север и так далее.
(Здесь я сказал, что верхний левый угол равен 0,0, а нижний правый угол равен 4,4, и показано, какое перемещение будет совершать каждый индекс массивов из центральной точки X на уровне 2,2.)
.....
.536.
.1X0.
.724.
.....
Как он настроен, если вы выполняете ^1
( ^
выполняя побитовое XOR) с индексом, вы получаете противоположное направление - 0 и 1 - противоположности, 2 и 3 - противоположности и так далее. (Другой способ настроить его - повернуть по часовой стрелке, начиная с севера, затем^4
получить противоположное направление.)
Теперь вы можете проверить все направления из заданной точки, перебрав ваши di
иdj
массивы , вместо того, чтобы записывать каждое направление в отдельной строке (всего восемь!) (Только не забудьте выполнить проверку границ :))
diK
и djK
формируют все направления рыцарей вместо всех смежных направлений. Здесь ^1
перевернется по одной оси, ^4
даст противоположный прыжок коня.
.7.6.
0...5
..K..
1...4
.2.3.
d={0,1,0,-1,0}
для этого: пары предметовd[i], d[i+1]
дают мне четыре основных направления.