具有深度优先搜索的最短路径

时间:2014-12-09 05:02:15

标签: algorithm graph shortest-path depth-first-search breadth-first-search

如何使用DFS获取最短路径。我已经多次看过这个问题,但回复通常都是使用BFS或不同的算法。在机器人穿越迷宫的背景下怎么样? BFS是不可能的,因为它从节点跳到节点,机器人需要回溯。

现在我正在尝试使用以下方法解决问题:

def dfs(self, v):
    v.visited = True
    for adj in v.adj:
        if adj.visited is False:
            # set the parent
            adj.successor = v
            # explore the other nodes
            self.dfs(adj)

然而,这并不一定会返回最短路径。有没有其他方法来解决这个问题?我已经看到了一些使用深度优先迭代深化的建议,但是我找不到很多实现这种算法的例子。

1 个答案:

答案 0 :(得分:0)

如果有人对我如何解决这个问题感兴趣,这是我的解决方案:

def dfs(self, v):
    if v.successor is None:  # this is the root node
        v.cost = 0
    v.visited = True
    for adj in v.adj:
        if adj.visited is False:
            # set the parent
            adj.successor = v
            adj.cost = v.cost + 1
            self.dfs(adj)
        # if the cost is less switch the successor
        # and set the new cost
        elif adj.cost > v.cost + 1:
            adj.successor = v
            adj.cost = v.cost + 1
            self.dfs(adj)

这本质上是DFS的一个版本,用于跟踪每个顶点的成本。如果顶点的成本超过后继+ 1步,则它设置新的后继。这允许在不使用BFS的情况下找到最短路径。