计算有向图中每个节点可到达的节点数,比O(V ^ 2)还快吗?

时间:2018-08-09 11:26:59

标签: graph dynamic-programming depth-first-search cycle directed-graph

所以我有一个有向图,其中可能包含循环。对于每个节点,我需要计算从该节点可到达的节点数,并将其存储在表中。天真的方法是在每个节点上使用DFS,导致最多O(V ^ 2)复杂度,这太慢了。

使用以下算法,如果没有循环,则可以轻松解决此问题:

array numReachable(V elements of -1)

dfs(u):
    if (numReachable[u] != -1) return numReachable[u]
    mark u as VISITED
    count = 1
    for each node v adjacent to u:
        if (v is UNVISITED):
            count += dfs(v)
    mark u as UNVISITED
    return numReachable[u] = count

for each node u:
    dfs(u)

但是,循环会破坏它。我尝试了变通办法,但似乎什么也没有用。我该怎么办?

0 个答案:

没有答案