我想请问以下问题:
给定一个有向图(不一定是DAG),对于每个顶点v,计算从v可达的顶点数量。
使用暴力算法(n次DFS)可以在O(n^2)的时间复杂度内得到答案。是否有一种更快的方法来计算呢?我们可以使用强联通分量将给定的图转化为DAG。我尝试过利用先前计算出的值,这样我只需要访问每个顶点一次,但这根本行不通。最大的问题在于像这样的图:
2 -> 1
3 -> 2
3 -> 1
1 -> 4
我从顶点1开始运行深度优先搜索并返回结果1。然后,使用它,我可以立即计算出2的答案(在第二次深度优先搜索中我不再进入顶点1,而是使用其答案),这个答案为2。然后我到达了顶点3...该算法会汇总1和2的结果,因为我可以到达这两个顶点。但是,顶点1已经在计算顶点2的结果中计算过了。这样就得到了等于4的答案,这是不正确的。