def search(self): pq = pque.IndexedPriorityQLow(self.costToThisNode, len(self.graph.nodes)) pq.insert(self.source) while not pq.empty(): nextClosesNode = pq.pop() self.shortestPathTree[nextClosesNode] = self.searchFrontier[ nextClosesNode] #if nextClosesNode == self.target: # return if self.isSatisfied(nextClosesNode): self.target = nextClosesNode return for edge in self.graph.edges[self.graph.nodes[nextClosesNode]]: newCost = self.costToThisNode[nextClosesNode] + edge.cost if self.searchFrontier[edge.to.id] == None: self.costToThisNode[edge.to.id] = newCost pq.insert(edge.to.id) self.searchFrontier[edge.to.id] = edge elif newCost < self.costToThisNode[ edge.to.id] and self.shortestPathTree[ edge.to.id] == None: self.costToThisNode[edge.to.id] = newCost pq.changePriority(edge.to.id) self.searchFrontier[edge.to.id] = edge print "pq empty" self.target = self.source
def search(self): pq = pque.IndexedPriorityQLow(self.fCosts, len(self.graph.nodes)) pq.insert(self.source) while not pq.empty(): nextClosesNode = pq.pop() self.shortestPathTree[nextClosesNode] = self.searchFrontier[ nextClosesNode] if nextClosesNode == self.target: return for edge in self.graph.edges[self.graph.nodes[nextClosesNode]]: hcost = self.calculateHeuristicCost(self.target, edge.to.id) gcost = self.gCosts[nextClosesNode] + edge.cost if self.searchFrontier[edge.to.id] == None: self.fCosts[edge.to.id] = gcost + hcost self.gCosts[edge.to.id] = gcost pq.insert(edge.to.id) self.searchFrontier[edge.to.id] = edge elif gcost < self.gCosts[edge.to.id] and self.shortestPathTree[ edge.to.id] == None: self.fCosts[edge.to.id] = gcost + hcost self.gCosts[edge.to.id] = gcost pq.changePriority(edge.to.id) self.searchFrontier[edge.to.id] = edge