可达性问题
- 单点可达性:回答“是否存在一条从起点s到给定节点v的有向路径?”等类似问题。
- 多点可达性:回答“是否存在一条从集合中任意顶点到给定节点v的有向路径?”等类似问题。
- 顶点对的可达性:回答“是否存在一条从一个给定节点v到给定节点w的有向路径?”等类似问题。
单点可达性和多点可达性:
使用深度优先遍历很容易实现。
算法实现:
public class DirectedDFS{
private boolean[] marked;
//单点可达性
public DirectedDFS(Digraph G,int s){
mark = new boolean[G.V()];
dfs(G,s);
}
//多点可达性
public DirectedDFS(Digraph G, Iterable<Integer> sources){
mark = new boolean[G.V()];
for(int s : sources)
if(!marked[s]) dfs(G,s);
}
//深度优先遍历算法
private void dfs(Graph G,int v) {
marked[v] = true;
for(int w: G.adj(v))