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