有向图中的可达性(深度优先)
单点可达:给定一副有向图和一个起点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];
}
}