Пояснение
-
Граф представлен в виде словаря, где ключи — это вершины, а значения — словари соседей с весами рёбер.
-
Например, 'A': {'B': 1, 'C': 4}
означает, что из вершины A
есть ребро в B
с весом 1
и в C
с весом 4
.
-
Куча с приоритетом (priority_queue
) используется для хранения вершин и их текущих расстояний. Вершина с наименьшим расстоянием извлекается первой.
-
Алгоритм:
-
Инициализируем расстояния до всех вершин как бесконечность (float('infinity')
), кроме стартовой вершины (её расстояние равно 0
).
-
Добавляем стартовую вершину в кучу.
-
Пока куча не пуста:
-
Извлекаем вершину с минимальным расстоянием.
-
Обновляем расстояния до её соседей, если найден более короткий путь.
-
Добавляем обновлённые расстояния в кучу.
-
Результат:
Сложность
Эта реализация эффективна для разреженных графов (где количество рёбер значительно меньше, чем V²).