有向图中的可达性(深度优先)

单点可达:给定一副有向图和一个起点s,求是否存在一条从s到v的路径。 
多点可达:给定一幅有向图和一个节点的集合,求是否存在一条从集合中的任意顶点到给定顶点的有向路径。 
有向图的可达性API: 
public class DirectedDFS 
DirectedDFS(Digraph G,int s) 在G中找到从s可到达的所有顶点 
DirectedDFS(Digraph G,Iterable resource) 在G中找出从resource中的所有顶点可达的所有顶点 
boolean marked(int v) v是否可达

public class DirectedDFS{
    private boolean[] marked;

    public DirectedDFS(Digraph G, int s){
        marked = new boolean[G.V()];
        bfs(G,s);
    }

    public DirectedDFS(Digraph G, Iterable<Integer> resource){
        marked = new boolean[G.V()];
        for(int v: resource){
            dfs(G,v);
        }
    }

    private void bfs(Digraph G, int v){
        marked[v] = true;
        for(int w:G.adj(v)){
            if(!marked[w])
                bfs(G,w);
        }
    }

    public boolean marked(int v){
        return marked[v];
    }
}


 

posted @ 2023-02-07 19:55  車輪の唄  阅读(45)  评论(0编辑  收藏  举报  来源