算法导论之深度优先搜索
发布时间:2020-05-24 21:07:21 所属栏目:Java 来源:互联网
导读:算法导论之深度优先搜索
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 import org.loda.structure.Stack;
/**
*
* @ClassName: DFS
* @Description: 深度优先搜索(无向图)
* @author minjun
* @date 2015年5月24日 上午4:02:24
*
*/
public class DFS {
//原点
private int s;
// visited[i]表示i节点是否被访问过
private boolean[] visited;
// prev[i]表示沿着一条路径到i时,这条路径上i的上一个节点
private int[] prev;
public DFS(int s,Graph g){
//初始化
this.s=s;
int v=g.v();
visited=new boolean[v];
prev=new int[v];
for(int i=0;i<v;i++){
prev[i]=-1;
}
dfs(s,g);
}
private void dfs(int v,Graph g) {
//访问节点
visited[v]=true;
//查找v所有的邻接节点
for(int w:g.adj(v)){
//找到没有访问过的节点
if(!visited[w]){
prev[w]=v;
dfs(w,g);
}
}
}
public boolean hasPathTo(int v){
return visited[v];
}
public Iterable<Integer> pathTo(int v){
if(!hasPathTo(v)) return null;
Stack<Integer> path=new Stack<Integer>();
for(int i=v;i!=s;i=prev[i]){
path.push(i);
}
path.push(s);
return path;
}
public static void main(String[] args) {
//原点
int s=0;
//顶点数目
int n=6;
Graph g=new Graph(n);
//将顶点添加到图中
g.add(0,5);
g.add(2,4);
g.add(2,3);
g.add(1,2);
g.add(0,1);
g.add(3,4);
g.add(3,5);
g.add(0,2);
DFS bfs=new DFS(s,g);
for(int i=0;i<n;i++){
Iterable<Integer> path=bfs.pathTo(i);
System.out.print("从原点"+s+"到"+i+"的可达路径为:");
if(path==null){
System.out.println("不可达");
}else{
for(int j:path){
System.out.print(j+"->");
}
// System.out.println("t统计得到的距离为"+bfs.distTo(i));
System.out.println();
}
}
}
}
输出内容为:
从原点0到0的可达路径为:0->
从原点0到1的可达路径为:0->2->1->
从原点0到2的可达路径为:0->2->
从原点0到3的可达路径为:0->2->3->
从原点0到4的可达路径为:0->2->3->4->
<p>
<span></span>从原点0到5的可达路径为:0->2->3->5->
</p>
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
