def Dijkstra(self, G: graph.Graph, start: graph.Vertex): visited = set() parents = {start.getVertexName(): None} stack = [(0, start)] distance = {start.getVertexName(): 0} while stack: tmp = heapq.heappop() name = tmp[1].getVertexName() visited.add(name) nbr = G.getNeighbors(name) for node in nbr: node_name = node.getVertexName() if node_name in visited: continue else: node_dis = node.getCost(tmp[1]) + distance[name] if node_dis < distance.get(node_name, sys.maxsize): heapq.heappush(stack, (node_dis, node)) parents[node_name] = name distance[node_name] = node_dis return parents, distance
def dfs(self, G: graph.Graph, node: graph.Vertex, target: graph.Vertex): node_name = node.getVertexName() if node == target: return self.parent if node_name not in self.visit: self.visit.add(node_name) for nbr in G.getNeighbors(node_name): nbr_name = nbr.getVertexName() if nbr_name not in self.visit: self.parent[nbr_name] = node_name self.dfs(G, nbr, target) return None
def dfs(self, G: graph.Graph, start: graph.Vertex, target: graph.Vertex): stack = [start] visited = set() parent = {} while stack: cur = stack.pop() if cur.getVertexName() == target.getVertexName(): return parent else: nbr = G.getNeighbors(cur.getVertexName()) for node in nbr: name = node.getVertexName() if name not in visited: visited.add(name) parent[name] = cur.getVertexName() stack.append(node) return -1