java实现图的深度优先搜索和广度优先搜索
2016-06-18 12:51
435 查看
深度搜索遍历过程 (1)假设初始状态图中顶点均未被访问,从顶点v出发访问此顶点; (2)依次从v的未被访问的邻接点出发深度优先遍历,直到与v有路径相通的所有顶点都被访问到; (3)若图中尚有顶点未被访问到,则选择其中一个顶点作为新的起始点,重复(1)(2)步骤直到图中所有顶点都访问完毕。
广度搜索遍历过程
(1)假设初始状态图中顶点均未被访问,从顶点v出发访问此顶点; (2)依次访问v的未曾被访问过的邻接点,然后从这些邻接点出发按层次继续访问,直到v所在的连通分量中的所有顶点都被访问到; (3)若图中尚有顶点未被访问到,则选择其中一个顶点作为新的起始点,重复(1)(2)步骤直到图中所有顶点都访问完毕。
代码中图的结构:
<img src="https://img-blog.csdn.net/20160618125505036?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
package graph; import java.util.LinkedList; import java.util.Queue; public class DFS { public int G[][]; public int N; boolean visit[]; public static int BEST = 10000; public DFS() { N = 9; G = new int[][] { { BEST, BEST, 1, 1, 1, 1, BEST, BEST, BEST }, { BEST, BEST, BEST, BEST, BEST, BEST, 1, BEST, BEST }, { 1, BEST, BEST, BEST, BEST, BEST, BEST, 1, BEST }, { 1, BEST, BEST, BEST, BEST, BEST, BEST, 1, BEST }, { 1, BEST, BEST, BEST, BEST, BEST, BEST, BEST, 1 }, { 1, BEST, BEST, BEST, BEST, BEST, BEST, BEST, 1 }, { 1, BEST, BEST, BEST, BEST, BEST, BEST, BEST, BEST }, { BEST, BEST, 1, 1, BEST, 1, BEST, BEST, BEST }, { BEST, BEST, BEST, BEST, 1, 1, BEST, BEST, BEST }, }; visit = new boolean ; } public void DFSTrace() {//深度优先搜索 for (int i = 0; i < N; i++) { if (visit[i] != true) DFST(i); } } public void DFST(int v) { visit[v] = true; Visited(v); for (int j = 0; j < N; j++) { if (visit[j] != true && G[v][j] != BEST) { DFST(j); } } } public void BFSTrace() {//广度优先搜索 for (int i = 0; i < visit.length; i++) { visit[i] = false; } Queue<Integer> que = new LinkedList<Integer>(); for (int k = 0; k < N; k++) { if (!visit[k]) { que.add(k); visit[k] = true; while (!que.isEmpty()) { int node = (int) que.peek(); que.poll(); Visited(node); for (int i = 0; i < N; i++) { if (!visit[i] && G[node][i] != BEST) { que.add(i); visit[i] = true; } } } } } } public void Visited(int v) { System.out.println(v); } public static void main(String[] args) { DFS d = new DFS(); //d.DFSTrace(); d.BFSTrace(); } }
相关文章推荐
- 深度优先搜索的用法——lake counting
- 不可逆加密,数字签名,Java实现,摘要,MD5,SHA128,SHA256
- 快速排序算法java代码实现
- 递归读取某个路径下的所有文件
- Populating Next Right Pointers in Each Node (LeetCode)
- Populating Next Right Pointers in Each Node II (LeetCode)
- Path Sum(LeetCode)
- Minimum Depth of Binary Tree(LeetCode)
- 数据结构(scheme) -- 抽象数据类型(ADT) -- 图
- Leetcode - 广度优先遍历
- Leetcode - 广度优先算法专题
- 深度优先遍历的栈实现
- RSA算法简介及简单java实现类
- N皇后问题
- 选择排序,Java实现
- 冒泡排序,Java实现
- 利用广度优先遍历BreadthFirstSearch (BFS)实现两个点之间是否连通
- 图的深度优先搜索-临接矩阵实现
- 图的邻接表存储与深度优先遍历代码实现
- 关于邻接表和其深度优先遍历、广度优先遍历的问题