【数据结构】Java实现图的DFS和BFS
来源:互联网 发布:360杀毒软件for mac 编辑:程序博客网 时间:2024/05/20 16:35
图的深度优先遍历(DFS)和广度优先遍历(BFS),DFS利用递归来实现比较易懂,DFS非递归就是将需要的递归的元素利用一个栈Stack来实现,以达到递归时候的顺序,而BFS则是利用一个队列Queue来实现。
package DataStructure;import java.util.LinkedList; import java.util.Queue; import java.util.Stack;public class Graph { private int number = 9; private boolean[] flag; private String[] vertexs = { "A", "B", "C", "D", "E", "F", "G", "H", "I" }; private int[][] edges = { { 0, 1, 0, 0, 0, 1, 1, 0, 0 }, { 1, 0, 1, 0, 0, 0, 1, 0, 1 }, { 0, 1, 0, 1, 0, 0, 0, 0, 1 }, { 0, 0, 1, 0, 1, 0, 1, 1, 1 }, { 0, 0, 0, 1, 0, 1, 0, 1, 0 }, { 1, 0, 0, 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 1, 0, 1, 0, 1, 0 }, { 0, 0, 0, 1, 1, 0, 1, 0, 0 }, { 0, 1, 1, 1, 0, 0, 0, 0, 0 } }; void DFSTraverse() { flag = new boolean[number]; for (int i = 0; i < number; i++) { if (flag[i] == false) {// 当前顶点没有被访问 DFS(i); } } } void DFS(int i) { flag[i] = true;// 第i个顶点被访问 System.out.print(vertexs[i] + " "); for (int j = 0; j < number; j++) { if (flag[j] == false && edges[i][j] == 1) { DFS(j); } } } void DFS_Map(){ flag = new boolean[number]; Stack<Integer> stack =new Stack<Integer>(); for(int i=0;i<number;i++){ if(flag[i]==false){ flag[i]=true; System.out.print(vertexs[i]+" "); stack.push(i); } while(!stack.isEmpty()){ int k = stack.pop(); for(int j=0;j<number;j++){ if(edges[k][j]==1&&flag[j]==false){ flag[j]=true; System.out.print(vertexs[j]+" "); stack.push(j); break; } } } } } void BFS_Map(){ flag = new boolean[number]; Queue<Integer> queue = new LinkedList<Integer>(); for(int i=0;i<number;i++){ if(flag[i]==false){ flag[i]=true; System.out.print(vertexs[i]+" "); queue.add(i); while(!queue.isEmpty()){ int k=queue.poll(); for(int j=0;j<number;j++){ if(edges[k][j]==1&&flag[j]==false){ flag[j] = true; System.out.print(vertexs[j]+" "); queue.add(j); } } } } } } public static void main(String[] args) { Graph graph = new Graph(); System.out.println("DFS递归:"); graph.DFSTraverse(); System.out.println(); System.out.println("DFS非递归:"); graph.DFS_Map(); System.out.println(); System.out.println("BFS非递归:"); graph.BFS_Map(); } }
程序运行结果:
1 0
- 【数据结构】Java实现图的DFS和BFS
- 数据结构实验3(图的DFS和BFS实现)
- 《大话数据结构》图的BFS和DFS
- BFS和DFS的java实现
- java 实现DFS和BFS
- 自己动手实现图的BFS和DFS
- 图的BFS和DFS在数据结构为邻接矩阵时的实现
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
- 【数据结构】图的遍历之DFS和BFS
- 数据结构(17)--图的遍历DFS和BFS
- 数据结构—连通图的遍历—DFS和BFS
- BFS和DFS详解以及java实现
- BFS和DFS详解以及java实现
- Java实现数据结构之深度优先搜索DFS和广度优先搜索BFS
- 数据结构 《2》----基于邻接表表示的图的实现 DFS(递归和非递归), BFS
- 欢迎使用CSDN-markdown编辑器
- js模块化编程require.js学习摘记
- 2.1.5 Median of Two Sorted Arrays
- Unique Paths I | II leetcode
- Making Recommendations
- 【数据结构】Java实现图的DFS和BFS
- Lesson4 一阶方程代换法
- 《Docker入门》:安装ubuntu14.04镜像
- Nginx + Tomcat 实现动静分离
- RMI在外网不能通信的解决
- 【源码分享】-wpf界面源代码分享
- unity5之monodeveloper新发现
- 关于swift,OC,C++混合编程(一)
- Android中使用Notification