Dijkstra Shortest Path Algorithm in Python

This is Dijkstra shortest path algorithm on a directed graph.
This code assumes that there is a path between (start) and (end)

The code in Python

import heapq

graph = {
    'A': [('B', 10), ('C', 1), ('D', 10)],
    'B': [('I', 10), ('C', 5), ('E', 10)],
    'C': [('D', 1), ('E', 5), ('I', 10)],
    'D': [('E', 1), ('F', 5)],
    'E': [('I', 1), ('D', 2)],
}

def shorted_path(graph, start, end):
    visited = set([])
    minheap = [(0, start)]
    distances = {start: 0}
    parents = {}
    answer = None

    while minheap:
        current = heapq.heappop(minheap)
        name = current[1]
        if name in visited:
            continue
        visited.add(name)
        distance = distances[name]
        if name == end:
            answer = distance
            break

        for neighbour in graph[name]:
            distance2 = distance + neighbour[1]
            if neighbour[0] not in distances or distance2 < distances[neighbour[0]]:
                distances[neighbour[0]] = distance2
                heapq.heappush(minheap, (distance2, neighbour[0]))
                parents[neighbour[0]] = name

    c = end
    path = []
    while c:
        path.insert(0, c)
        c = parents[c] if c in parents else None
    return (path, answer)

print(shorted_path(graph, 'A', 'I'))

About

My name is Omar Qunsul. You can find me on Linkedin.

I write these articles mainly as a future reference for me. So I dedicate some time to make them look shiny, and share them with the public.


Homepage