Пример #1
0
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
Пример #2
0
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())