Ini adalah teknik untuk menyandikan semua arah sebagai array - setiap pasangan di[i],dj[i]
memiliki arah yang berbeda.
Jika kita membayangkan kita memiliki bagian di lokasi x, y, dan kita ingin menambahkan pada x dan nilai y untuk memindahkannya ke lokasi terdekat, 1,0 di timur, -1,0 barat, 0,1 di selatan, 0, -1 adalah utara dan seterusnya.
(Di sini saya telah mengatakan kiri atas adalah 0,0 dan kanan bawah adalah 4,4 dan menunjukkan pergerakan apa yang akan dilakukan setiap indeks array dari titik pusat, X, di 2,2.)
.....
.536.
.1X0.
.724.
.....
Cara pengaturannya, jika Anda melakukan ^1
( ^
menjadi XOR bitwise) pada indeks Anda mendapatkan arah yang berlawanan - 0 dan 1 berlawanan, 2 dan 3 berlawanan dan seterusnya. (Cara lain untuk mengaturnya adalah dengan berjalan searah jarum jam mulai dari utara - lalu ^4
membawa Anda ke arah yang berlawanan.)
Sekarang Anda dapat menguji semua arah dari titik tertentu dengan mengulang array di
dan dj
, alih-alih perlu menulis setiap arah pada barisnya sendiri (untuk total delapan!) (Jangan lupa untuk melakukan pemeriksaan batas :))
diK
dan djK
membentuk semua arah ksatria alih-alih semua arah yang berdekatan. Di sini, ^1
akan membalik sepanjang satu sumbu, ^4
akan memberikan lompatan ksatria yang berlawanan.
.7.6.
0...5
..K..
1...4
.2.3.
d={0,1,0,-1,0}
untuk ini: pasangan barang untukd[i], d[i+1]
memberi saya empat arah mata angin.