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); } } } } }
相关文章推荐
- java算法:图遍历(深度优先和广度优先)
- [置顶] 图:图的邻接矩阵创建、深度优先遍历和广度优先遍历详解
- 二叉树遍历,深度有限遍历,广度优先遍历,前序中序后续优先遍历,层次遍历
- 图——广度优先遍历和深度优先遍历——邻接矩阵表示法
- [转】二叉树与图的深度优先和广度优先遍历
- 树的深度优先与广度优先遍历
- 深度广度优先遍历最小生成树
- 图------有向网的建立、深度优先遍历,广度优先遍历
- 【数据结构实验】图的深度优先/广度优先遍历
- 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程
- 图的遍历之 深度优先搜索和广度优先搜索
- 【个人模板】图的广度,深度优先遍历
- 图论----深度优先遍历和广度优先遍历
- 深度优先和广度优先遍历
- 二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式 二叉树的遍历方式: 1、深度优先:递归,非递归实现方式 1)先序遍历:先访问根节点,再依次访问左子树和右子树 2)中序遍
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
- 图的遍历-广度优先和深度优先遍历
- [置顶] 图:图的邻接表创建、深度优先遍历和广度优先遍历代码实现
- 二叉树的深度优先递归、非递归遍历、广度优先遍历 实例
- 深度优先遍历与广度优先遍历