算法7-4:宽度优先搜索
2016-03-25 11:21
239 查看
宽度优先搜索的基本思想就是先将源点加入到一个队列中。 每次从队列中取出一个顶点。将该顶点的邻居顶点中没有拜訪过的顶点都加入到队列中。最后直到队列消耗完成为止。
而最短路径算法在互联网中应用很广泛,尤其是路由这块。
由于路由追求的是高效,所以每一个路由路径都是通过最短路径计算出来的。假设没有最短路径算法,我们可能就享受不到这么快的网速了。
另外。宽度优先搜索在快递行业也会用到。用于计算最短路径。
应用
宽度优先搜索能够解决最短路径问题。而最短路径算法在互联网中应用很广泛,尤其是路由这块。
由于路由追求的是高效,所以每一个路由路径都是通过最短路径计算出来的。假设没有最短路径算法,我们可能就享受不到这么快的网速了。
另外。宽度优先搜索在快递行业也会用到。用于计算最短路径。
代码
import java.util.Stack; /** * Created by caipeichao on 14-6-10. */ public class BFS { private int s; private boolean[] visited; private int[] edgeTo; public BFS(Graph G, int s) { this.s = s; visited = new boolean[G.V()]; // 注意,这句话不要忘记了 edgeTo = new int[G.V()]; // 注意:这句话不要忘记了 bfs(G); } public void bfs(Graph G) { LinkedQueue<Integer> q = new LinkedQueue<Integer>(); q.enqueue(s); while (!q.isEmpty()) { int v = q.dequeue(); for (int w : G.adj(v)) { if (!visited[w]) { visited[w] = true; // 注意:这句话不要忘记了 edgeTo[w] = v; q.enqueue(w); } } } } public boolean hasPathTo(int v) { return visited[v]; } public Iterable<Integer> pathTo(int v) { if (!hasPathTo(v)) return null; // 注意,这句话不要忘记了 Stack<Integer> result = new Stack<Integer>(); while (v != s) { result.add(v); v = edgeTo[v]; } return result; } }
相关文章推荐
- java 输入
- Android Fragment 真正的完全解析(上)
- C++第二次实验1.1
- ASP.NET MVC 5通过viewdata 向视图传递多个对象
- Hibernate中的自定义类型——UserType、CompositeUserType
- 浅谈HTML5
- java语言程序设计第十版(Introduce to java 10th) 课后习题 chapter7-24
- 创同义词
- 产生10条包含10个字符以内的随机字符串,并排序
- Android apk 混淆,加密,加壳 介绍
- iOS开发 - 现实动画
- iOS开发 - 多媒体
- Python常用模块用法分析
- LeetCode 225 Implement Stack using Queues
- IOS 点语法总结
- IOS @class #import
- CDuiString的bug
- 随机颜色
- 视频如何添加字幕
- python中FTP上传和下载