Questa è una tecnica per codificare tutte le direzioni come array: ogni coppia di di[i],dj[i]
è una direzione diversa.
Se immaginiamo di avere un pezzo in una posizione x, y, e vogliamo aggiungere alla sua x e al suo valore y per spostarlo in una posizione vicina, 1,0 è est, -1,0 è ovest, 0,1 è il sud, 0, -1 è il nord e così via.
(Qui ho detto che in alto a sinistra è 0,0 e in basso a destra è 4,4 e ho mostrato quale spostamento farà ogni indice degli array dal punto centrale, X, a 2,2.)
.....
.536.
.1X0.
.724.
.....
Nel modo in cui è impostato, se lo fai ^1
( ^
essendo XOR bit per bit) sull'indice ottieni la direzione opposta: 0 e 1 sono opposti, 2 e 3 sono opposti e così via. (Un altro modo per impostarlo è andare in senso orario partendo da nord, quindi ^4
ti porta nella direzione opposta.)
Ora puoi testare tutte le direzioni da un dato punto eseguendo il loop sugli array di
e dj
, invece di dover scrivere ogni direzione sulla propria riga (per otto in totale!) (Non dimenticare di controllare i limiti :))
diK
e djK
formare tutte le direzioni dei cavalieri invece di tutte le direzioni adiacenti. Qui, ^1
ruoterà lungo un asse, ^4
darà il salto del cavaliere opposto.
.7.6.
0...5
..K..
1...4
.2.3.
d={0,1,0,-1,0}
per questo: le coppie di oggetti perd[i], d[i+1]
darmi quattro direzioni cardinali.