Це приклад того, що я хочу зробити за допомогою коду. Я знаю, що ви можете скористатися пошуком точки стрибка, щоб легко дістатися із зеленого вузла до червоного вузла без проблем, або навіть A *. Але як ви обчислите це за допомогою основи.
На зображенні ви бачите, що для проходження з зеленого вузла до червоного вузла для проходження синього шляху потрібно лише 8 ходів. Синій шлях миттєво переміщує ваше положення від одного фіолетового вузла до іншого. Простір посередині, який коштує 2 ходи, - це точка між двома основними зонами, до яких потрібно переміститися.
Очевидно швидше пройти синій шлях, оскільки вам потрібно рухатись лише наполовину (приблизно) до жовтої стежки, але як мені це зробити програмно?
Для вирішення цієї проблеми припустимо, що навколо графіка є декілька фіолетових «деформацій», якими ви можете скористатися, І ми точно знаємо, куди буде перетворюватися кожна фіолетова точка і де вони знаходяться на графіку.
Деякі фіолетові основи мають двосторонній характер, а деякі - ні, значить, іноді ви можете вводити основу лише з одного боку, але не повертатися назад після викривлення.
Я подумав про рішення, і лише дійшов висновку, що зможу обчислити проблему, перевіривши відстань до кожної точки основи (мінус однонаправлені точки) та різницю між цими точками та близькими до них точками .
Програмі довелося б якось зрозуміти, що вигідніше брати другу основу, а не ходити з першого стрибка. Отже, замість переміщення 6 точок, то викривлення, то переміщення решти 8 кроків пішки (що також швидше, ніж взагалі не використовуйте деформації), то знадобиться 6 ходів, потім два переміщення до другої основи.
EDIT: Я зрозумів, що синій шлях насправді займе 12 рухів замість 8, але питання залишається тим самим.