Algorithm 深度优先搜索的最短路径
如何使用DFS获得最短路径。我已经看到这个问题被问了好几次,但是回答通常是使用BFS或不同的算法。如果机器人穿越迷宫呢?BFS是不可能的,因为它从一个节点跳到另一个节点,机器人需要回溯 现在,我正在尝试使用以下方法解决此问题: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
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在几乎所有的算法编程资源中都有广泛的介绍。此外,虽然它被大量地覆盖,但它不会详细说明如何修改它以获得最短路径。