march alex's blog
hello,I am march alex
posts - 52,comments - 7,trackbacks - 0
不同于深度优先搜索,广度优先搜索(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 阅读(223) 评论(0)  编辑  收藏 所属分类: java小程序

只有注册用户登录后才能发表评论。


网站导航: