Автотранспортному предприятию предстоит освоить новый маршрут между городами А и В. На рисунке представлены различные маршруты следования из А в В, проходящие через несколько других поселков. Расстояния указаны (числами в километрах) около стрелок.
Определить кратчайший маршрут следования автобусов из города А в город В.
Решение
Воспользуемся алгоритмом Дейкстры.
Метку вершины A полагаем равной 0, метки остальных вершин – недостижимо большое число. Это отражает то, что расстояния от вершины A до других вершин пока неизвестны. Все вершины графа помечаются как непосещенные.
Первый шаг
Минимальную метку имеет вершина A. Её соседями являются вершины 1 и 2. Обходим соседей вершины по очереди.
Первый сосед вершины A – вершина 1, длина пути до неё равна 30. Длина пути в неё через вершину A равна сумме кратчайшего расстояния до вершины A (значению её метки) и длины ребра, идущего из -й в 1-ю, то есть 0+30=30. Это меньше текущей метки вершины 1, поэтому новая метка 1-й вершины равна 30.
Второй сосед вершины A – вершина 2, длина пути до неё равна 50
. Длина пути в неё через вершину A равна сумме кратчайшего расстояния до вершины A (значению её метки) и длины ребра, идущего из -й во 2-ю, то есть 0+50=50. Это меньше текущей метки вершины 2, поэтому новая метка 2-й вершины равна 50.
Аналогично находим длины пути для всех других соседей.
Все соседи вершины A проверены. Текущее минимальное расстояние до вершины A считается окончательным и пересмотру не подлежит. Вершина A отмечается как посещенная.
Второй шаг
Шаг 1 алгоритма повторяется. Находим «ближайшую» из непосещенных вершин. Это вершина 1 с меткой 30.
Пытаемся уменьшить метки соседей выбранной вершины, пытаясь пройти в них через 1-ю вершину