我们可以使用哪种程序进行迷宫探索BFS或DFS

时间:2013-11-25 11:55:11

标签: algorithm time-complexity depth-first-search breadth-first-search maze

我知道我们可以使用DFS进行迷宫探索。但我认为我们也可以使用BFS进行迷宫探索。我在这里有点困惑,因为我读过的大部分书籍和文章都使用DFS来解决这个问题。 我认为与BFS相比,DFS的最佳案例时间复杂度会更好。但BFS和BFS的平均最差 案例时间复杂度相同。 DFS,这就是为什么我们更喜欢DFS而不是BFS。 我是对的还是我有一些误解

3 个答案:

答案 0 :(得分:12)

到目前为止,没有人提到DFSBFS给出的结果差异,我感到非常惊讶。

这两种算法的主要区别在于 BFS返回最短路径 DFS只返回路径

因此,如果您想使用BFS获取最短路径,请考虑其他优缺点(内存等)

答案 1 :(得分:7)

他们有相似的运行时间,但是由于访问单元格的顺序,任何一个问题都可能在任何给定问题上大大优于另一个。

就空间使用而言,BFS平均会为trees使用更多内存,但对于更一般的图形,在某些情况下,它可以使用显着更少的内存。

对于迷宫(如果我们定义一个迷宫,因为只有一种方法从起点到达一个单元而没有回溯,这意味着它本质上是一棵树), BFS通常会使用更多的内存,因为我们需要在内存中同时保留多条路径,其中DFS只需要在任何给定时间跟踪单个路径。

对于更一般的网格,在内存方面哪一个更好是不太明显的,特别是在考虑我们如何跟踪我们迄今为止访问过的细胞以防止重复访问细胞时。

如果你不关心记忆,你可以选择。如果您对递归非常熟悉,那么DFS应该更容易实现。

但是,如果您正在寻找一般网格中某个给定单元格的最短路径,请使用BFS(或A*),因为这样可以保证找到最短路径, DFS没有的地方(您仍然可以在迷宫中使用任何给定单元格只有一条路径)。

答案 2 :(得分:0)

两者都应该是等价的。 DFS的使用更多,因为它更容易实现。