Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 深度优先搜索的最短路径_Algorithm_Graph_Shortest Path_Depth First Search_Breadth First Search - Fatal编程技术网

Algorithm 深度优先搜索的最短路径

Algorithm 深度优先搜索的最短路径,algorithm,graph,shortest-path,depth-first-search,breadth-first-search,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 a

如何使用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)

但是,这并不一定返回最短路径。还有别的办法解决这个问题吗?我已经看到了一些使用深度优先迭代深化的建议,但我找不到很多实现此算法的示例。

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

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的情况下找到最短路径。

我认为深度优先搜索迭代深化背后的思想是,如果深度优先搜索尝试深入到N,则可以编写一个不追求递归的深度优先搜索。如果使用N=1,N=2,N=3运行它。。。当它第一次成功地找到目的地时,它已经找到了一条长度为N的路径,并且它知道没有长度小于N的路径有效,因此长度为N的路径必须是最短路径。还有一个问题,我发现很难相信任何认真的搜索已经完成。DFS在几乎所有的算法编程资源中都有广泛的介绍。此外,虽然它被大量地覆盖,但它不会详细说明如何修改它以获得最短路径。