广度优先BFS与深度优先DFS的区别

BFS

广度优先搜索算法(Breadth-First-Search,缩写为 BFS)
在IT生活圈人称它的搜索过程类似水面丢进一块石头激起层层涟漪
是一种利用队列实现的搜索算法,因为BFS在搜索过程中需要保存搜索过的状态,
而且一般情况需要一个队列来记录,队列的数据结构还可以按照
下标字典序列最小之类的排序要求规定进入的队列的顺序

按照上面的形象比如,BFS在搜索的时候就是先将它身边可以遍历的节点都遍历进入队列中
然后再从身边的节点里面再遍历所有的身边的节点的身边的节点
这样子就像从一点向四周扩散,
最后找到最优的解

BFS适合用于:
比如最短路径呀
还有最小生成树的问题呀
最少步数呀
最少交换次数呀
就是这种要找到最优解就行了的的问题
BFS搜索过程中遇到的解一定是离根最近的,遇到一个解,一定就是最优解,此时搜索算法可以终止。
而DFS搜索到的解不一定是离根最近的,只有全局搜索完毕,才能从所有解中找出离根的最近的解。
所以使用DFS解决这些问题,一般需要剪枝

DFS

深度优先搜索算法(Depth-First-Search,缩写为 DFS)
它的搜索过程IT界称之为牛角尖要钻到底才回头
是一种利用递归实现的搜索算法。

DFS适合搜索全部的解:
比如印象最深刻的就是全排列的问题,
它就是将一种可能遍历到底,然后再会去走其他的路
就类似于遍历树的时候,首先从根节点遍历到底
然后再从下面返回回来,遍历其他的节点

猜你喜欢

转载自blog.csdn.net/qq_43416157/article/details/108919514