Реализация на Python алгоритма Дейкстры для поиска кратчайшего пути

Вот пример функции для реализации алгоритма Дейкстры на Python:

import heapq
def dijkstra(graph, start):
    # Create a dictionary to store the shortest distances from the start node to all other nodes
    distances = {node: float('inf') for node in graph}
    distances[start] = 0
    # Create a priority queue to store nodes with their current shortest distance from the start node
    priority_queue = [(0, start)]
    while priority_queue:
        current_distance, current_node = heapq.heappop(priority_queue)
        # Ignore if we have already found a shorter path to the current node
        if current_distance > distances[current_node]:
            continue
        # Explore neighbors of the current node
        for neighbor, weight in graph[current_node].items():
            distance = current_distance + weight
            # Update the distance if a shorter path is found
            if distance < distances[neighbor]:
                distances[neighbor] = distance
                heapq.heappush(priority_queue, (distance, neighbor))
    return distances

Эта функция принимает два параметра: graph, который представляет граф как словарь словарей, и start, который представляет начальный узел алгоритма. Граф должен быть представлен в виде {узел1: {узел2: вес, узел3: вес},….

Функция инициализирует словарь расстояниядля хранения кратчайших расстояний от начального узла до всех остальных узлов. Первоначально все расстояния установлены на бесконечность, за исключением начального узла, которому присвоено значение 0. Он также создает приоритетную очередь priority_queueдля хранения узлов и их текущих кратчайших расстояний.

Затем алгоритм итеративно исследует узлы в приоритетной очереди. Для каждого узла он проверяет, есть ли к нему более короткий путь через текущий узел. Если найден более короткий путь, расстояние обновляется, и сосед добавляется в приоритетную очередь.

Наконец, функция возвращает словарь distances, который содержит кратчайшие расстояния от начального узла до всех остальных узлов.