【数据结构】Java实现图的DFS和BFS
2015-12-12 00:43
661 查看
图的深度优先遍历(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(); } }
程序运行结果:
相关文章推荐
- 【数据结构】Java实现二叉树遍历(递归)
- 【数据结构】Java实现二叉树遍历(非递归)
- 【数据结构】Java实现单链表
- RIA带来了什么
- 采用动态缓存机制的内容发布实现(二)系统组成
- 内容管理相关要素
- java数据结构--栈
- 数据结构再学习-散列表(哈希表)实现
- 小猪的数据结构辅助教程——2.5 经典例子:约瑟夫问题的解决
- 数据结构:循环队列(C语言实现)
- SDUT 数据结构实验之查找二:平衡二叉树
- php导出mysql的数据结构
- 数据结构与内存中的堆与栈
- kmp算法中next数组的3种表示方式
- 自动还原魔方算法数据结构
- 【Java数据结构】递归
- 数据结构实验之查找三:树的种类统计 (STL)
- 小练习,splay区间反转
- 第十三周--数据结构-Kruskal算法的验证
- 【数据结构】选择排序算法示例