当前位置: 首页 > 知识库问答 >
问题:

如何在执行 BFS/DFS 算法时从遍历路径中找到最终路径

崔棋
2023-03-14

我正在尝试解决一个问题,在一棵树上应用广度优先搜索算法和深度优先搜索算法,并找出这两种算法找到的遍历和最终路径。

我实际上感到困惑的是我如何计算这两种不同的路径?它们真的不同吗?

例如,考虑下面的树,

假设,我们的起始节点是A,目标节点是H

对于这两种算法,这就是我所感觉的穿越路径和最终路径

  1. 对于BFS

遍历路径:A B C D E F G H

最终路径:A C F H

如果这就是它的工作方式,那么我如何才能找到最终的路径?找到遍历的路径非常容易,但找到最终的路径却不那么容易。

同样地,

遍历路径:A B D E C F G

最终路径:A C F H

同样,我如何从DFS的遍历路径中提取最终路径。

这实际上变得有点复杂。如果我的目标节点可以从两侧到达,该怎么办?在这种情况下,我如何找到最终路径?

例如,考虑以下方案,

假设在这种情况下,我们的起始节点是A,目标节点也是H。

使用BFS和DFS都很容易计算遍历路径。

但是对于最终路径,“H”可以从两边到达,它可以从F到达,也可以从G到达

对于DFS,您可以将最终路径写成A C F G,因为从F节点开始,我们将首先到达H(因为G仍然未被探索,但是您仍然必须从遍历路径中提取此最终路径,我不知道该如何做)

但是对BFS来说,你不能这样做。那么,在这种情况下,我的最终道路会是什么呢?在这种情况下,应该有两条最终道路吗?

有人能帮我一下吗?

共有1个答案

徐昊焜
2023-03-14

一种方法是维护目标到源节点的映射。每次前进时,记录前进的源节点。因此,在BFS的情况下,它看起来像:

parents = {
  'A': NULL,
  'B': 'A',
  'C': 'A',
  'D': 'B',
  'E': 'B',
  'F': 'C',
  'G': 'C' 
}

然后,从最后一个节点开始,向后重建路径:

node = target
path = []
while node:
   path.append(node)
   node = parents[node]

同样的方法适用于DFS和Dijkstra

 类似资料:
  • 我们得到了表格的邻接列表 意味着从U到V有一个成本C的优势。 给定的邻接列表适用于具有N个节点的单连通树,因此包含N-1条边。 给出了一组节点。 现在的问题是,在F中的节点中找到最长路径的最佳方法是什么?可以用O(N)来做吗? 来自F中每个节点的DFS是唯一的选项吗?

  • 我有一个一般性的问题,关于如何在边没有权的无向图中找到最短路径和最长路径。 我们需要使用DFS算法来寻找图中的最长路径,而我们需要使用BFS算法来寻找图中的最短路径,这是一个正确的结论吗?

  • 你有一辆2005年本田雅阁,油箱里还剩50英里(最大重量)。在50英里半径范围内,你可以访问哪些麦当劳的位置(图节点)?这是我的问题。 如果你有一个加权有向无环图,你如何找到在给定的权限制内可以访问的所有节点? 我知道Dijkstra的算法,但我似乎找不到任何关于它在最小路径问题之外的用途的文档。在我的例子中,我们没有特别想结束的节点,我们只想在不超过最大权重的情况下尽可能多地结束。似乎您应该能够

  • 问题内容: 我需要使用二进制路径设置环境。在外壳中,我可以使用它来查找路径。python中是否有等效项?这是我的代码。 问题答案: 有。

  • 你好,亲爱的朋友们。 我想在随机图中找到最短路径。我使用boost图形库。据我所知,我需要利用点之间的现有距离构建图形。之后,我需要使用一些算法。。。 正如我所见,Dijkstra的算法实际上是找到从1点到其他点的所有路径。(应该很慢?) A*需要一些额外的数据(不仅仅是距离) 如何找到2点之间的最短路径?我在bgl文件夹中看到了许多最短路径算法标头,但我没有找到如何使用它们的示例。 此外,我可以

  • 主要内容:最短路径算法在给定的图存储结构中,从某一顶点到另一个顶点所经过的多条边称为 路径。 图 1 图存储结构 例如在图 1 所示的图结构中,从顶点 A 到 B 的路径有多条,包括 A-B、A-C-B 和 A-D-B。当我们给图中的每条边赋予相应的权值后,就可以从众多路径中找出总权值最小的一条,这条路径就称为 最短路径。 图 2 无向带权图 以图 2 为例,从顶点 A 到 B 的路径有 3 条,它们各自的总权值是: