Это метод кодирования всех направлений в виде массивов - каждой пары 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]дают мне четыре основных направления.