您的位置:首页 > 编程语言 > Java开发

java算法:图遍历(深度优先和广度优先)

2012-11-01 10:01 519 查看

java算法:图遍历

递归图形遍历或深度优先搜索,系统地访问图中所有的结点的方法,如,树的遍历,也是很多递归算法的基础。

访问v,递归地访问每个附属于v的(未访问过的)结点,如果图是连通的,则最终能到达所有的结点。

例1:深度优先搜索

Java代码



private void dfs(int k){
visit(k);
visited[k] = true;
for(Node t = adj[k]; t != null; t = t.next){
if(!visited[t.v]){
dfs(t.v);
}
}
}

private void dfs(int k){
	visit(k);
	visited[k] = true;
	for(Node t = adj[k]; t != null; t = t.next){
		if(!visited[t.v]){
			dfs(t.v);
		}
	}
}

使用邻接表表示法在具有V个顶点和E条边的图中进行深度优先搜索所需要的时间与V+E成比例。

例2:广度优先搜索

Java代码



void bfs(int k){
IntQueue q = new IntQueue(v*v);
q.put(k);
while(!q.empty()){
if(!visited[k = q.get()]){
Node t;
visit(k);
visited[k] = true;
for(t = adj[k]; t != null; t = t.next){
if(!visited[t.v]){
q.put(t.v);
}
}
}
}
}

void  bfs(int k){
	IntQueue q = new IntQueue(v*v);
	q.put(k);
	while(!q.empty()){
		if(!visited[k = q.get()]){
			Node t;
			visit(k);
			visited[k] = true;
			for(t = adj[k]; t != null; t = t.next){
				if(!visited[t.v]){
					q.put(t.v);
				}
			}
		}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: