这是Facebook黑客杯中的图搜索问题。 Problem Link
问题描述:
MXN矩阵我们必须找到从源到目标的最小距离。有激光可以改变方向,并且在我们采取的每一步中都会发射激光。
问题:
我使用了相同的方法在编辑中描述但是我使用了 DFS而不是BFS 而我对某些情况的回答是错误的。
如何DFS正在发挥作用为什么DFS在BFS工作时没有对此进行处理。
Code LINK
tHanks
答案 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:检查图表中是否存在任何路径。
注意 - 虽然它们可以在许多其他地方使用。