算法导论——DFS深度优先搜索

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

package org.loda.graph;

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 pathTo(int v){
		if(!hasPathTo(v)) return null;
		Stack path=new Stack();
		
		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 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->

从原点0到5的可达路径为:0->2->3->5->       

转载于:https://my.oschina.net/u/1378920/blog/418998

你可能感兴趣的:(算法导论——DFS深度优先搜索)