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

使用深度优先搜索来解决有向图中节点的可达性问题,分为单点可达性和多点可达性。DiGraph为有向图结构,请参考上篇《邻接表的有向图》实现
单点可达:给定一副有向图和一个起点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];
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37520037/article/details/82079563