Java图的遍历(深度优先遍历、广度优先遍历)
2017-05-05 19:50
447 查看
以上为测试图及其邻接矩阵表示,具体代码如下
import java.util.LinkedList; import java.util.Queue; /** * 图的两种遍历方法 * @author QQ 1023507448 * */ public class graphTraverse { private static String[] node; //存储节点编号 private static int[][] arc; //存储边 private static boolean[] flag;//存储节点是否被访问过 //深度优先遍历 private void depthFirstTraversal() { flag = new boolean[node.length]; for( int i=0;i<node.length;i++ ) { if( !flag[i] ) { visitByRecursive(i); } } } //深度优先遍历-递归访问节点 private void visitByRecursive(int i) { flag[i] = true; //设置为已访问过 System.out.print(node[i]+" ");//在控制台打印 for( int j=0;j<node.length;j++ ) { if( !flag[j] && arc[i][j]==1 ) { visitByRecursive(j);//递归 } } } //广度优先遍历 private void breadthFirstTraversal () { Queue<Integer> qu = new LinkedList<Integer>(); /*Queue是接口,只能new一个它的实现类, LinkedList实现了Queue */ flag = new boolean[node.length]; for( int i=0;i<node.length;i++ ) { if( !flag[i] ) { if(qu.offer(i))//元素入队列 { flag[i] = true; //设置为已访问过 System.out.print(node[i]+" ");//在控制台打印 } while( !qu.isEmpty() )//若队列不为空 { int temp = qu.poll();//出队列并返回值 for( int j=0;j<node.length;j++ ) { if( !flag[j] && arc[temp][j]==1 ) { if(qu.offer(j))//元素入队列 { flag[j] = true; //设置为已访问过 System.out.print(node[j]+" ");//在控制台打印 } } } } } } } public static void main(String[] args) { // TODO Auto-generated method stub graphTraverse gt = new graphTraverse(); node = new String[]{ "A", "B", "C", "D", "E", "F", "G", "H" };//节点标记 arc = new int[][] { //边 { 0, 1, 1, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 } }; System.out.println("深度优先搜索"); gt.depthFirstTraversal();//调用深度优先搜索 System.out.println(""); System.out.println("广度优先搜索"); gt.breadthFirstTraversal();//调用广度优先搜索 } }
相关文章推荐
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- Java 实现深度优先和广度优先遍历
- 二叉树的深度和广度优先遍历 - Java实现
- Java数据结构----图--深度优先遍历BFS和广度优先遍历DFS
- Java数据结构----图--深度优先遍历BFS和广度优先遍历DFS
- 深度优先遍历 广度优先遍历JAVA
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- java 图的邻接矩阵表示,深度优先遍历,广度优先遍历
- Java图的建立以及深度广度优先遍历(邻接矩阵)
- 深度优先和广度优先遍历及其 Java 实现
- 存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现
- 深度优先和广度优先遍历及其 Java 实现
- 图的深度优先和广度优先遍历及其Java实现
- 二叉树的深度和广度优先遍历 - Java实现-2
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- java 图的邻接矩阵表示,深度优先遍历,广度优先遍历
- 深度优先和广度优先遍历及其 Java 实现
- java实现图的遍历(深度优先遍历和广度优先遍历)
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- 数据结构--图的理解:深度优先和广度优先遍历及其 Java 实现