You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

有向图中可到达所有顶点的顶点识别及O(n+m)时间可行性探讨

如何在O(n+m)时间内识别有向图中能到达所有顶点的顶点

可以做到,核心思路是利用**强连通分量(SCC)**和缩点后的有向无环图(DAG)特性,全程保持线性时间复杂度。具体步骤如下:

1. 提取所有强连通分量

使用Kosaraju算法、Tarjan算法或Gabow算法,这三种算法都能在O(n+m)时间内找出图中所有SCC。同一SCC内的顶点互相可达,因此分量内的顶点要么全部满足“能到达所有其他顶点”的条件,要么全部不满足。

2. 构建缩点DAG

将每个SCC视为一个超级节点,若原图中存在从SCC X到SCC Y(X≠Y)的边,则在DAG中添加一条X指向Y的边(注意去重,避免重复边)。这一步的时间复杂度仍是O(n+m)。

3. 定位并验证候选分量

在缩点后的DAG中,只有满足以下条件的分量才可能包含目标顶点:

  • 首先检查入度为0的分量数量:如果DAG中有多个入度为0的分量,那么不存在任何顶点能到达所有其他顶点——因为这些入度为0的分量之间无法互相到达,没有顶点能同时覆盖它们。
  • 如果只有一个入度为0的分量,将其作为候选分量。接下来对这个候选分量在DAG中执行一次DFS或BFS,验证它是否能到达所有其他超级节点。这一步的时间复杂度是O(n'+m')(n'为分量数,m'为缩点后边数),仍属于O(n+m)范畴。

4. 确定最终结果

如果候选分量能到达DAG中所有其他超级节点,那么该分量中的所有原顶点就是满足条件的顶点;否则,图中不存在这样的顶点。

复杂度说明

所有步骤的时间复杂度均为线性O(n+m),远优于朴素的O(n(n+m))方法。


内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:55:16