可达性问题
- 单点可达性:回答“是否存在一条从起点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))
if(!marked[w]) dfs(G,w);
}
public

本文探讨了有向图的可达性问题,包括单点可达性、多点可达性和顶点对之间的可达性,以及如何使用深度优先遍历解决这些问题。接着,文章深入讲解了强连通分量的概念,并介绍了Kosaraju算法的思想和实现,用于找出有向图的强连通分量。算法虽然简洁,但理解起来具有一定挑战性。

1111

被折叠的 条评论
为什么被折叠?



