BFS
BFS介绍
BFS,即宽度优先搜索,经常用于图上遍历等。相比于dfs,bfs是横向的搜索,是一层一层找的。
BFS通过队列进行依次处理,对于每个结点的子节点,将它通过排队的形式排在这一层的后面而非直接遍历,对于一颗BFS树,它的BFS序便是一层一层的向下拓展。
同时BFS由于是层层遍历,先访问到的一定是距离初始点最短的。
BFS模板
1 | int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};//四个方向上x,y轴分别的变化量 |
DFS与BFS的对比
搜索方向:dfs是纵向搜索,它能更好的体现一条数链上的传递关系,如父子关系,总价值等。bfs是横向搜索,它能保证每个点到起始点都是其层数,即都是最短路径,同时也能很容易获取某个结点位于哪一层。
处理的对象:dfs可以对于每个物品或每一步考虑不同的情况来进行遍历。bfs大部分都是处理树上问题以及图论部分。dfs在处理树上问题以及图论部分时需要考虑是否存在爆栈情况,在时间上bfs往往更优。
总而言之,dfs与bfs各有各自独特的应用场景,可以根据相应的情况选择合适的搜索方式。