Bu kodla yapmak istediklerimin bir örneği. Yeşil düğümden kırmızı düğüme sorunsuz bir şekilde, hatta A * 'ya kolayca ulaşmak için atlama noktası aramayı kullanabileceğinizi biliyorum. Fakat bunu çözgü ile nasıl hesaplarsınız.
Resimde, mavi yoldan giderken yeşil düğümden kırmızı düğüme geçmenin sadece 8 hamle yaptığını görebilirsiniz. Mavi yol, konumunuzu anında bir mor düğümden diğerine hareket ettirir. Ortada 2 hamle yapan alan, gitmek için hareket etmeniz gereken iki çözgü bölgesi arasındaki bir nokta.
Mavi yola çıkmak açıkça daha hızlı, çünkü sarı yola kadar sadece yarıya (kabaca) ilerlemeniz gerekiyor, fakat bunu programlı olarak nasıl yaparım?
Bu sorunu çözmek amacıyla, kullanabileceğiniz grafiğin etrafında çok sayıda mor "çözgü" olduğunu varsayalım ve her bir mor noktanın nereye çarpacağını ve grafiğin neresinde olduklarını tam olarak biliyoruz.
Bazı mor çözgüler iki yönlüdür ve bazıları değildir, anlam ifade eder, bazen bir çözgü sadece bir taraftan girebilir, ancak çözgü sonrasında geri dönemezsiniz.
Çözümü düşündüm ve yalnızca her çözgü noktasına (tek yönlü noktaları eksi) ve bu noktalar ile bunlara yakın olan noktalar arasındaki farkı kontrol ederek sorunu hesaplayabileceğim sonucuna vardım. .
Programın bir şekilde, ilk sıçramadan yürümek yerine ikinci çözgü almanın daha faydalı olduğunu bulması gerekiyordu. Böylece, 6 nokta hareket ettirmek, sonra çarpmak, sonra geriye kalan 8 adımı yürüyerek (aynı zamanda hiç çözgü kullanmamaktan daha hızlı) hareket ettirmek yerine 6 hamle, sonra iki hamle ikinci çözgüye gider.
EDIT: Mavi yolun 8 yerine 12 hamle yapacağını fark ettim, ancak soru aynı kalıyor.