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
Example #2
0
 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
Example #3
0
 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