不同于深度优先搜索,广度优先搜索(breadth-first search,简称BFS,又称宽度优先搜索)采取的工具是队列。
我们回顾一下
深度优先搜索,可以发现:
深度优先搜索是通过递归实现的,其实就相当于在内存中开了一个
栈来实现。
而广度优先搜索通过
队列来实现,其解决问题的大体思路如下:
首先,将代表初始状态的节点放入队列queue中;
然后,循环进行以下操作:
从队列里面推出一个元素u,将通过u能够联系到的且可以优化的节点v推入队列中
即:
深度优先搜索用栈(stack)来实现,整个过程可以想象成一个倒立的树形:
1、把根节点压入栈中。
2、每次从栈中弹出一个元素,搜索所有在它下一级的元素,把这些元素压入栈中。并把这个元素记为它下一级元素的前驱。
3、找到所要找的元素时结束程序。
4、如果遍历整个树还没有找到,结束程序。
广度优先搜索使用队列(queue)来实现,整个过程也可以看做一个倒立的树形:
1、把根节点放到队列的末尾。
2、每次从队列的头部取出一个元素,查看这个元素所有的下一级元素,把它们放到队列的末尾。并把这个元素记为它下一级元素的前驱。
3、找到所要找的元素时结束程序。
4、如果遍历整个树还没有找到,结束程序。
广度优先搜索可以用来解决很多问题,比如,求最短路的SPFA算法就是用了宽度优先搜索的思想。
posted on 2015-03-07 21:14
marchalex 阅读(229)
评论(0) 编辑 收藏 所属分类:
java小程序