Graph 检查是否可以从DG中的节点S到达节点T

Graph 检查是否可以从DG中的节点S到达节点T,graph,graph-algorithm,dijkstra,Graph,Graph Algorithm,Dijkstra,在无向图中,很容易将图预划分为组件,并用标识组件的数字标记它们。因此,要检查节点T是否可以通过来自S的路径到达,如果它们都具有相同的标记,则为true 有可能在有向图中做类似的事情吗?基本上,先进行预计算,然后做一个简单的查找是否可以在没有任何DFS的情况下从S到达T?除了可达性矩阵的最简单的实现和它们的优化(其复杂性为O(n^2)。恐怕没有恒定的时间查找 不过有一些有趣的想法。我将在下面列出其中两个: 1) 寻找一组覆盖原图G的树 每个顶点V的索引如下所示: For each t_i in T

在无向图中,很容易将图预划分为组件,并用标识组件的数字标记它们。因此,要检查节点T是否可以通过来自S的路径到达,如果它们都具有相同的标记,则为true


有可能在有向图中做类似的事情吗?基本上,先进行预计算,然后做一个简单的查找是否可以在没有任何DFS的情况下从S到达T?

除了可达性矩阵的最简单的实现和它们的优化(其复杂性为O(n^2)。恐怕没有恒定的时间查找

不过有一些有趣的想法。我将在下面列出其中两个:

1) 寻找一组覆盖原图G的树

每个顶点V的索引如下所示:

For each t_i in T

    V is indexed by (t_i, a, b) where a is the smallest postorder of descendants in the tree and b is the postorder of V in the tree.

为了查询reach(u,v),我们要找出是否存在一对(t_i,a_u,b_u)和(t_i,a_v,b_v),这样当你的图是一个有向无环图时,棘手的情况是,这实际上变成了“有效地解决有向可达性问题的预计算”我不知道在没有DFS的情况下如何做到这一点,但我怀疑这是可能的,需要一些创造性。
Let G = (V, E) be a directed graph. 
For v in V
    L(v) = (L_in(v), L_out(v)), such that L_in(v), L_out(v) ⊆ V and there is a path from every x ∈ L_in(v) to v and from v to every x ∈ L_out(v).