Для эффективного решения задач на поиск кратчайшего пути в условиях множества стрелок можно использовать алгоритм Дейкстры. blog.skillfactory.ru Он работает для графов, у которых нет рёбер с отрицательным весом, то есть таких, при прохождении через которые длина пути как бы уменьшается. blog.skillfactory.ru
Алгоритм Дейкстры пошаговый: blog.skillfactory.ru
- Инициализация. blog.skillfactory.ru Выбирается точка, от которой будут отсчитываться пути. blog.skillfactory.ru Расстояние до самой себя у этой вершины равно нулю, остальные пока не известны, их отмечают символом бесконечности. blog.skillfactory.ru
- Первый шаг. blog.skillfactory.ru Выбирается ещё не посещённая вершина с самой маленькой меткой относительно исходной — то есть такая, которая находится ближе всех. blog.skillfactory.ru На первом шаге это одна из соседних вершин — та, которая соединена с исходной самым «маленьким» ребром. blog.skillfactory.ru
- Дальнейшие шаги. blog.skillfactory.ru Для выбранной точки нужно осмотреть соседей и записать длину пути до них с учётом пройденного пути. blog.skillfactory.ru А потом выбрать ближнюю точку. blog.skillfactory.ru При этом нужно учитывать точки, которые уже использовали в прошлый раз. blog.skillfactory.ru Если они дают более «выгодный» путь, лучше воспользоваться ими. blog.skillfactory.ru
- Отметка посещённой вершины. blog.skillfactory.ru Шаги повторяются, пока на графе есть непосещённые точки. blog.skillfactory.ru Если вершину не посетили, она не участвует в расчётах. blog.skillfactory.ru Если после её «открытия» появился новый, более короткий путь к какой-либо точке, то минимальное расстояние для неё перезаписывается. blog.skillfactory.ru
- Конец алгоритма. blog.skillfactory.ru Когда непосещённые вершины заканчиваются, алгоритм прекращает работу. blog.skillfactory.ru Результат его действия — список кратчайших маршрутов до каждой точки из исходной. blog.skillfactory.ru Для каждого маршрута указана его длина. blog.skillfactory.ru
Также для решения задач поиска пути можно использовать алгоритмы постобработки маршрута. masters.donntu.ru Они позволяют разбить исходную задачу на несколько подзадач, например определить возможное направление движения, ключевые точки маршрута и удалить точки, лежащие на одной прямой, спрямить отдельные участки пути и так далее. masters.donntu.ru