Example #1
0
def dijkstra(source, graph):
    pQueue = PriorityQueue()
    graph[source]['dist'] = 0

    for v in graph:
        pQueue.enqueue(v, graph[v]['dist'])

    while not pQueue.isEmpty():
        u = pQueue.dequeue()
        baseDist = graph[u]['dist']
        for w in graph[u]['edgeTo']:
            edgeLen = graph[u]['edgeTo'][w]
            newDist = baseDist + edgeLen
            currentDist = graph[w]['dist']
            if newDist < currentDist:
                graph[w]['dist'] = newDist
                pQueue.changePriority(w, newDist)

    distanceList = []
    for v in graph:
        distanceList.append((v, graph[v]['dist']))

    return distanceList