def dijkstraQ(graph, initial): visited = {initial: 0} path = {} nodes = PriorityQueue() for node in graph.nodes: nodes.put() while nodes: min_node = None for node in nodes: if node in visited: if min_node is None: min_node = node elif visited[node] < visited[min_node]: min_node = node if min_node is None: break nodes.remove(min_node) current_weight = visited[min_node] for edge in graph.edges[min_node]: try: weight = current_weight + graph.distances[(min_node, edge)] except: continue if edge not in visited or weight < visited[edge]: visited[edge] = weight path[edge] = min_node return visited, path
class TestPriorityQueue(TestQueueClasses): def setUp(self): self.queue = PriorityQueue() def test_insert(self): self.queue.insert(1) self.assertEqual(1, self.queue.items[0]) def test_insert_remove_multi(self): self.queue.insert(1) self.queue.insert(2) self.queue.insert(3) self.assertEqual(3, self.queue.remove()) self.assertEqual(2, self.queue.remove()) self.assertEqual(1, self.queue.remove())