Bu, tüm yönleri diziler olarak kodlamak için bir tekniktir - her çift di[i],dj[i]
farklı bir yöndür.
X, y konumunda bir parçamız olduğunu hayal edersek ve onu yakın bir konuma taşımak için x ve y değerini eklemek istersek, 1,0 doğu, -1,0 batı, 0,1 güney, 0, -1 kuzey vb.
(Burada sol üst 0,0 ve sağ alt 4,4 demiştim ve dizilerin her bir indeksinin merkezi nokta olan X'den 2,2'de hangi hareketi yapacağını gösterdim.)
.....
.536.
.1X0.
.724.
.....
Kurulum şekli , indekste yaparsanız ^1
( ^
bitsel XOR olarak) zıt yönü elde edersiniz - 0 ve 1 zıttır, 2 ve 3 zıttır vb. (Kurmanın başka bir yolu da kuzeyden başlayarak saat yönünde ilerlemektir - sonra ^4
size ters yön verir.)
Artık üzerinde döngü verilen bir noktadan tüm yönlere test edebilirsiniz di
ve dj
bunun yerine kendi satırında her yönünü yazmak için ihtiyaç duyma, diziler (toplam sekiz!) (Sadece :) sınırları denetleme yapmak unutmayın)
diK
ve tüm bitişik yönler yerine djK
tüm şövalyelerin yönlerini oluşturun . Burada, ^1
bir eksen boyunca ^4
dönecek, zıt ata sıçrayacak.
.7.6.
0...5
..K..
1...4
.2.3.
d={0,1,0,-1,0}
: öğe çiftlerid[i], d[i+1]
bana dört ana yön vermek için .