예제 #1
0
 def dijkstra(self, s):
     sdist = dict(((n, 1E9) for n in self.graph.nodes()))
     sdist[s] = 0
     pathprev = {s: None}
     marked = {}
     pq = [[sdist[n], n] for n in self.graph.nodes()]
     Ref = dict([(pq[i][1], i) for i in range(len(pq))])
     heap = Heap(pq, Ref)
     heap.heapify()
     #print pq
     #print Ref
     while pq:
         node_distance, node = heap.heappop()
         marked[node] = True
         for nei in self.graph.get_neighbours(node):
             if nei not in marked:
                 nei_new_dist = node_distance + self.graph.get_weight(
                     nei, node)
                 if sdist[nei] > nei_new_dist:
                     #print pq
                     heap.decrease_key(Ref[nei], nei_new_dist)
                     #print pq
                     sdist[nei] = nei_new_dist
                     pathprev[nei] = node
     return sdist, pathprev
    def __init__(self, start_node, goal_node, grid):
        self.grid = grid
        self.position = start_node.xy
        self.start_node = start_node
        self.goal_node = goal_node

        self.open_list = Heap()
        self.start_node.set_val("g", 0)
        self.start_node.set_val("f", start_node.h_val)
        self.open_list.add(start_node, start_node.f_val)

        self.search()
예제 #3
0
from utils import Heap

heap = Heap([3, 1, 2])
heap.push(1)
heap.push(2)
a = [i for i in heap]

assert (a == [1, 1, 2, 2, 3])