Esta é uma técnica para codificar todas as direções como matrizes - cada par de di[i],dj[i]está em uma direção diferente.
Se imaginarmos que temos uma peça em um local x, y, e quisermos somar seus valores x e y para movê-la para um local próximo, 1,0 é leste, -1,0 é oeste, 0,1 é sul, 0, -1 é norte e assim por diante.
(Aqui, eu disse que o canto superior esquerdo é 0,0 e o canto inferior direito 4,4 e mostrei qual movimento cada índice das matrizes fará a partir do ponto central, X, em 2,2.)
.....
.536.
.1X0.
.724.
.....
Da forma como está configurado, se você fizer ^1( ^sendo XOR bit a bit) no índice, obterá a direção oposta - 0 e 1 são opostos, 2 e 3 são opostos e assim por diante. (Outra forma de configurá-lo é ir no sentido horário, começando no norte - então, ^4leva você na direção oposta.)
Agora você pode testar todas as direções a partir de um determinado ponto fazendo um loop sobre seus arrays die dj, em vez de precisar escrever cada direção em sua própria linha (para oito no total!) (Só não se esqueça de verificar os limites :))
diKe djKformar todas as direções dos cavaleiros em vez de todas as direções adjacentes. Aqui, ^1vai virar ao longo de um eixo, ^4vai dar o salto do cavalo oposto.
.7.6.
0...5
..K..
1...4
.2.3.
d={0,1,0,-1,0}para isso: pares de itens parad[i], d[i+1]me dar quatro direções cardeais.