Ini adalah contoh dari apa yang ingin saya lakukan melalui kode. Saya tahu Anda dapat menggunakan pencarian titik melompat untuk dengan mudah mendapatkan dari simpul hijau ke simpul merah tanpa masalah, atau bahkan A *. Tetapi bagaimana Anda menghitung ini dengan lungsin.
Pada gambar, Anda dapat melihat bahwa hanya diperlukan 8 gerakan untuk mendapatkan dari simpul hijau ke simpul merah saat mengambil jalur biru. Jalur biru langsung memindahkan posisi Anda dari satu simpul ungu ke simpul berikutnya. Ruang di tengah yang memerlukan 2 gerakan adalah titik di antara dua zona lungsin yang harus Anda pindah ke.
Jelas lebih cepat untuk mengambil jalur biru, karena Anda hanya perlu memindahkan setengah (kira-kira) sejauh jalur kuning, tetapi bagaimana saya melakukan ini secara terprogram?
Untuk tujuan memecahkan masalah ini, mari kita asumsikan ada beberapa "warps" ungu di sekitar grafik yang dapat Anda gunakan, DAN kami tahu persis di mana setiap titik ungu akan melengkung ke, dan di mana mereka berada pada grafik.
Beberapa warp ungu adalah bi-directional, dan beberapa tidak, artinya, kadang-kadang Anda hanya dapat memasukkan warp dari satu sisi, tetapi tidak kembali setelah warping.
Saya telah memikirkan solusinya, dan hanya menyimpulkan bahwa saya akan dapat menghitung masalah dengan memeriksa jarak ke setiap titik warp (minus poin uni-directional), dan perbedaan antara titik-titik itu, dan titik-titik yang dekat dengan mereka .
Program ini harus mencari tahu entah bagaimana bahwa lebih menguntungkan untuk mengambil lungsin kedua, daripada berjalan dari lompatan pertama. Jadi, alih-alih memindahkan 6 titik, lalu membengkokkan, lalu memindahkan 8 langkah tersisa dengan berjalan kaki (yang juga lebih cepat daripada tidak menggunakan bengkok sama sekali), itu akan mengambil 6 langkah, kemudian dua bergerak ke bengkok kedua.
EDIT: Saya menyadari jalur biru sebenarnya akan mengambil 12 langkah, bukan 8, tetapi pertanyaannya tetap sama.