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