004基于图的深度优先搜索

图学习笔记索引

图学习笔记索引(全部)
001自定义输入流In类实现
002背包数据类型Bag实现
003无向图数据类型实现
004基于图的深度优先搜索
005使用深度优先搜索找图中的所有连通分量
005-1基于深度优先搜索查找图中连通路径
006基于深度优先搜索判断图中是否存在环
007基于深度优先搜索判断一个无向图图是否是一个二分图
008广度优先搜索查找连通图中的最短路径
009有向图数据类型实现
010有向图的可达性
011带权重的无向边数据类型Edge实现
012加权无向图数据类型实现

本文代码来自《算法(第4版)》

基于图的深度优先搜索

1.自定义输入流In

从文件中读取无向图图的顶点关系。
tinyWG.txt文件中的第一行为顶点数,第二行为边数。
第三行到最后是两个相邻的顶点:
13
13
0 5
4 3
0 1
9 12
6 4
5 4
0 2
11 12
9 10
0 6
7 8
9 11
5 3
routes.txt 内容:
JFK MCO
ORD DEN
ORD HOU
DFW PHX
JFK ATL
ORD DFW
ORD PHX
ATL HOU
DEN PHX
PHX LAX
JFK ORD
DEN LAS
DFW HOU
ORD ATL
LAS LAX
ATL MCO
HOU MCO
LAS PHX

tinyDG.txt中的内容:
13
22
4 2
2 3
3 2
6 0
0 1
2 0
11 12
12 9
9 10
9 11
8 9
10 12
11 4
4 3
3 5
7 8
8 7
5 4
0 5
6 4
6 9
7 6
tinyEWG.txt中的内容:
8
16
4 5 0.35
4 7 0.37
5 7 0.28
0 7 0.16
1 5 0.32
0 4 0.38
2 3 0.17
1 7 0.19
0 2 0.26
1 2 0.36
1 3 0.29
2 7 0.34
6 2 0.40
3 6 0.52
6 0 0.58
6 4 0.93
点击文字获取:001自定义输入流In类实现

2.定义背包类Bag

点击文字获取:002背包数据类型Bag实现

3.无向图G的构造

从文件中读取图的顶点信息,构造一幅无向图。
点击文字获取:003无向图数据类型实现

4.深度优先搜索DepthFirstSearch

package algorithms.graph; 
import java.io.IOException;
/*
 * 深度优先搜索
 * 可判断两个顶点是否连通;
 * 可计算与起点相连通的顶点的个数;
 * 可用于计算连通分量的个数;
 * 可用于判断顶点在哪个连通分量重;
 * */
public class DepthFirstSearch {
	private boolean[] marked;
    private int count;
    public DepthFirstSearch(Graph G, int s){
    	 marked = new boolean[G.V()];
    	 dfs(G, s);
    }
    public void dfs(Graph G, int v){
    	marked[v] = true;
    	count++;
    	for(int w : G.adj(v))
    		if(!marked[w])
    			dfs(G, w);
    }
    public boolean marked(int w){
    	return marked[w];
    }
    //与起点s相连通的顶点的个数
    public int count(){
    	return count;
    }
	public static void main(String[] args) throws IOException {
		In in = new In("D:\\tinyWG.txt"); 
		Graph G = new Graph(in);
		int s = 0;
		DepthFirstSearch depthfs = new DepthFirstSearch(G, s);
		System.out.println("与顶点"+s+"相连通的顶点个数: "+depthfs.count()); 
		for(int v = 0; v < G.V(); v++)
			System.out.println(s+"与"+v+"是否连通:"+depthfs.marked(v));
		
	}

}

6.总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值