图的广度优先遍历概念和实现
来源:互联网 发布:中国特色社会主义知乎 编辑:程序博客网 时间:2024/06/13 23:16
广度优先遍历是按层次遍历,和树的广度优先遍历很像。给定一个顶点,一层一层的往外遍历。可以想象成一组人在向各个方向走迷宫,当遇到路口时等待其他人走到这一层路口,然后分裂成更多的人走这个迷宫。
广度优先遍历是通过队列实现的。
与深度优先不同,paths找到的路径是顶点到目标点最短的路径
/** * 广度优先遍历 * @author yuli * */public class BreadthFirstSearch implements Paths{ //标记是否被访问列表 private boolean[] marked; //访问的次数 private int count; private int[] edgeTo;////源顶点,用来记录寻找路径 private int start;//开始的顶点 public BreadthFirstSearch(UndirectedGraph graph,int start) { //通过顶点数创建访问列表 marked = new boolean[graph.vertexNum()]; this.start = start; edgeTo = new int[graph.vertexNum()]; bfs(graph, start); } //广度优先搜索方法 public void bfs(UndirectedGraph graph,int vertex){ Queue<Integer> queue = new LinkedList<>(); queue.offer(vertex); marked[vertex] = true; //如果队列不为空就循环 while(!queue.isEmpty()){ //获得队头 vertex = queue.poll(); //访问队头 System.out.println(vertex); //遍历邻接点 Iterable<Integer> adj = graph.adj(vertex); for (Integer integer : adj) { //如果邻接点没有被访问就入队 if(!marked[integer]){ //标记邻接点已经被访问了 marked[integer] = true; //记录邻接点的源路径 edgeTo[integer] = vertex; //将邻接点入队 queue.offer(integer); } } } } /** * 是否包含到v的路径 */ @Override public boolean hasPathTo(int v) { //该顶点是否被访问过 return marked[v]; } /** * 找到起始顶点到指定顶点(v)的一条路径 */ @Override public Iterable<Integer> pathTo(int v) { if(!hasPathTo(v)){ return null; } Stack<Integer> path = new Stack<>(); //从路径的顶点,递归回到开始的节点 for(int m = v;m != start ;m = edgeTo[m]){ path.push(m); } path.push(start); return path; }}
阅读全文
0 0
- 图的广度优先遍历概念和实现
- 图的深度优先遍历和广度优先遍历实现
- 图的深度优先和广度优先遍历及其实现
- 图的遍历:深度优先遍历和广度优先遍历
- Java实现图的深度和广度优先遍历算法
- C++实现图的邻接矩阵的创建以及其深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历 Java实现
- 用java语言实现图的广度优先遍历和深度优先遍历
- 图的深度优先遍历和广度优先遍历代码实现
- c语言实现图的深度优先遍历和广度优先遍历
- C语言实现图的邻接矩阵存储结构及深度优先遍历和广度优先遍历
- 邻接矩阵实现--图的深度优先遍历DFS和广度优先遍历BFS
- 邻接表实现--图的深度优先遍历DFS和广度优先遍历BFS
- Java实现图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历算法
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 循环结构、方法的重载
- java接口不能实例化原因
- ubuntu安装influxdb
- Kruskal模板
- 数组
- 图的广度优先遍历概念和实现
- C# DataTable 去重
- BlueNRG How-to
- Linux之文件及目录常用操作
- 面向对象概述、this、private
- jQuery Mobile中按钮button的data-*选项
- 淘淘商城系列(x)Active整合spring实现商品同步索引
- 修改caffe源代码--添加loss(层)函数--CPU
- Python学习笔记——20170830