广度优先搜索与深度优先搜索的 java 实现
2017-07-24 01:23
477 查看
1.广度优先搜索
这个示例来解决某个定点到其他所有顶点的无权最短路径长度,并将每一步的队列变化输出。
import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; public class Test { static int [] distance; //有向图的邻接矩阵表示法 static int [] [] matrix = { {1,1,0,1,0,0,0}, {0,1,0,1,1,0,0}, {1,0,1,0,0,1,0}, {0,0,1,1,1,1,1}, {0,0,0,0,1,0,1}, {0,0,0,0,0,1,0}, {0,0,0,0,0,1,1} }; static void print( Queue<Integer> queue ) { System.out.println(Arrays.toString(queue.toArray())); } //广度优先搜索 static void bfs(int s) { Queue<Integer> q = new LinkedList<>(); //起点进队 q.offer(s); distance[s] = 0; print(q); //只要队列不为空,而且 v 可到 i ,而且 i 点从未访问(很关键,用 distance[i] == -1 表示) //distance[i] 就等于 distance[v] + 1 //并使 i 进队,每一步的队列变化将在输出中显示 while( !q.isEmpty() ) { int v = q.poll(); for( int i = 0; i < 7; i++) if( matrix[v][i] == 1 && distance[i] == -1 && i != v) { distance[i] = distance[v] + 1; q.offer(i); } print(q); } } public static void main( String [] args) { //初始化距离均为-1 distance = new int [7]; for( int i = 0; i < 7; i++) distance[i] = -1; //测试点v2 bfs(2); System.out.println("该点到各点最短距离:" + Arrays.toString(distance)); } }
输出
[2] [0, 5] [5, 1, 3] [1, 3] [3, 4] [4, 6] [6] [] 该点到各点最短距离:[1, 2, 0, 2, 3, 1, 3]
2.深度优先搜索
深度优先相比广度优先搜索,更容易理解,只需简单递归,这里仅列其伪代码。void dfs(Vertice v) { v.visit = true; for each Vertice w adjacent to v if ( !w.visit ) dfs(w); }
3.分析
时间复杂度均为O(V+E)。相关文章推荐
- Java实现数据结构之深度优先搜索DFS和广度优先搜索BFS
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- (算法入门)基本图论-深度优先搜索之JAVA实现
- 图的深度优先,完全搜索...有点脑残....java实现
- (算法入门)基本图论-广度优先搜索之JAVA实现
- 深度优先搜索和广度优先搜索的代码实现
- 普通树的广度搜索和深度搜索java实现
- Java 实现深度优先和广度优先遍历
- 深度优先和广度优先遍历及其 Java 实现
- 深度优先、广度优先java实现
- 图及其算法复习(Java实现) 一:存储结构,深度优先周游,广度优先周游
- 存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现
- java实现图的深度优先搜索和广度优先搜索
- java-二叉树广度优先实现、深度优先之前序实现(非递归)
- 无权图无向图【邻接矩阵存储】深度搜索和广度搜索--Java实现
- 基于邻接链表的图的广度优先搜索Java实现
- JAVA实现广度搜索&深度搜素
- 基于地图的深度优先、广度优先、Dijkstra算法Java实现。
- Java实现图:邻接矩阵表示、深度优先搜索、广度优先搜索、无向图的最小生成树