То есть вас не волнует общая длина пути, верно? Какое минимальное значение, которое вы встретите на пути?
Если это так, то вам не следует использовать «расстояние» в традиционном смысле как стоимость Дейкстры. Ваша очередь приоритетов должна возвращать узел с самым высоким значением энергии - таким образом, вы гарантированно никогда не пройдете путь через более низкое значение, если существует лучший путь.
Я полагаю, что это отличается от того, что предлагает Пол Ханкин в своем ответе. Это, вероятно, откроет много узлов в графе; Я думаю, что вы можете оптимизировать следующим образом:
Используйте расстояние [Евклидов или Манхэттен] до цели в качестве тай-брейка в функции сравнения. Таким образом, если два узла имеют одинаковую энергию, вы попробуете тот, который быстрее достигает цели.
При добавлении узлов в очередь с приоритетами вместо использования их фактической энергии для ее «стоимости» используйте минимум ее энергии и наименьшую энергию, встречавшуюся до сих пор. Поскольку вы заботитесь только о минимальных глобальных затратах, после того как вы вынуждены использовать узел с низким энергопотреблением, все, что выше, «стоит» одинаково. Это заставляет поиск вести себя как обычный поиск A * в окрестности цели.
Начало поиска с нижних локальных максимумов (я не уверен, но думаю, что это будет быстрее).
Использование расстояния в качестве разрыва связи в # 1 не повлияет на минимальную энергию, но должно заставить вещи работать быстрее (это похоже на поиск A *).
Редактировать: вот совершенно другой (но, вероятно, более медленный) способ думать.
Сначала выберите пороговую энергию. Выполните стандартный поиск Dijkstra / A *, но отклоните все узлы, энергия которых ниже порога. Если у вас нет пути, выберите больший порог и попробуйте снова. «Безопасным» начальным предположением будет минимум E на простом пути (например, идти налево, затем идти вверх) от начала до цели.
Теперь увеличьте порог и повторите Dijkstra / A *. Продолжайте, пока не найдете путь. Последний путь, перед которым вы больше не можете найти путь, - это кратчайший путь с наибольшей минимальной энергией на пути.
Вы также можете повторно использовать стоимость пути из одного поиска в качестве улучшенной эвристики A * для следующего поиска. Поскольку увеличение порога только увеличит длину путей, это допустимая эвристика .
Надеюсь, это поможет. Дайте мне знать, если что-то неясно.