何时使用DFS和BFS

时间:2015-01-17 08:01:30

标签: java algorithm graph

这是Facebook黑客杯中的图搜索问题。 Problem Link

问题描述: MXN矩阵我们必须找到从源到目标的最小距离。有激光可以改变方向,并且在我们采取的每一步中都会发射激光。

问题:

我使用了相同的方法在编辑中描述但是我使用了 DFS而不是BFS 而我对某些情况的回答是错误的。

如何DFS正在发挥作用为什么DFS在BFS工作时没有对此进行处理。

Code LINK

tHanks

Editorial

3 个答案:

答案 0 :(得分:3)

这很简单。如果您需要在未加权的图形中找到最短路径,则应使用BFS。如果您需要特定的遍历顺序(如拓扑排序),则应使用DFS。如果路径的顺序和长度无关紧要,您可以使用它们中的任何一个。在这个问题中,最短路径是必需的,因此BFS是一个明显的选择(DFS不起作用,因为它找到了一些路径,不一定是最短的路径)。

答案 1 :(得分:2)

BFS有利于找到最短路径的特殊原因是BFS以这样的顺序遍历节点,所有与源节点具有距离X的节点在具有距离X +的所有节点之前被处理1。这允许以非常简单有效的方式在两个节点之间找到图中的最短路径:当您向队列添加节点时,您知道它与源的距离比您当前处理的节点多1个(它不能更小,否则它已经在队列中)。如果你知道每个节点的距离,你还记得你来自哪个节点,你可以轻松地恢复最短的路径。

DFS以不同的顺序遍历节点,因此无法轻松调整以找到最短路径。

答案 2 :(得分:1)

BFS -

您可以使用BFS的案例 -

1:在未加权的图表中找到最小长度路径。

2:树的级别顺序遍历。

<强> DFS

您可以使用DFS的案例 -

1:找到问题的任何有效解决方案。

2:检查图表中是否存在任何路径。

注意 - 虽然它们可以在许多其他地方使用。