所以我有一个有向图,其中可能包含循环。对于每个节点,我需要计算从该节点可到达的节点数,并将其存储在表中。天真的方法是在每个节点上使用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)
但是,循环会破坏它。我尝试了变通办法,但似乎什么也没有用。我该怎么办?