@New-Developer
Изучаю JavaScript

Кратчайший путь через несколько точек?

На прямоугольной сетке есть несколько ключевых точек, через которые в заданной последовательности надо найти кратчайший маршрут без пересечения ранее посещенных точек и путей. Существует ли алгоритм для решения такой задачи, кроме Дейкстры или A* объединенных с перебором ?
Дополнил: соединение узлов может быть горизонтальным или вертикальным, без диагонального.
  • Вопрос задан
  • 198 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
В общем случае такая задача красиво и легко не решается. Если бы можно было самопересекаться, то несколько последовательных A* легко справились бы. А так остаются переборы всякие, да целочисленное линейное программирование и подобные NP алгоритмы.

Так, вашу задачу можно переформулировать в виде максимального потока минимальной стоимости из нескольких разных жидкостей (исток k-ой жидкости в точке k, сток - в k+1. Чтобы вершины нельзя было переиспользовать их надо раздвоить на входную и выходную, соедененные ребром).

Похоже, что в вашей задаче может хорошо работать метод отжига, или генетический алгоритм.

Я сомневаюсь, что даже для графа-сетки есть какой-то более простой алгоритм.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы