【问题标题】:Vertices in directed graph such that there exists a path to every another vertex from this one有向图中的顶点,使得存在从该顶点到另一个顶点的路径
【发布时间】:2014-01-11 08:11:57
【问题描述】:

我怎样才能找到有向图中的所有顶点,以便每个其他顶点都可以从这个顶点到达?现在我只能“发明” O(|V|^3) 算法——每个顶点的 DFS/BFS,但我敢肯定,存在一种更快的方法来解决这个问题。

谢谢!

【问题讨论】:

    标签: algorithm graph


    【解决方案1】:

    运行strongly connected components algorithm 将图形折叠成其强连通分量的directed acyclic graph。必须至少有一个没有传入边的强连接分量。如果恰好有一个,则该组件中的节点就是您要查找的节点。如果有多个没有传入边的强连接组件,则没有一个节点可以到达所有其他节点。

    【讨论】:

    • 天哪,你真是个天才,这是我一直在寻找的解决方案。谢谢!
    【解决方案2】:

    编辑:见下面的 cmets!

    有时这完全是关于术语的。这里的神奇词是可达性(参见Wikipedia)。不幸的是,我认为你不会喜欢结果。

    • 如果不需要所有答案,实际上建议运行 BFS/DFS。
    • 否则,请使用 Floyd-Warshall 算法。仍然在 O(|V|3) 中运行。
    • 存在针对特殊情况的某些优化算法 - 有关详细信息,请参阅 Wikipedia。

    所以这可能不是你想听到的。

    【讨论】:

    • 我可能错了(不遵循 100% 的定义),但这不是解决了一个更困难的问题(即获得所有顶点之间的可达性,而不仅仅是那些能够到达所有其他顶点的顶点)?正如另一个答案中所建议的那样,使用strongly connected components 似乎可以在少于 O(|V|^3) 的时间内工作。
    • 是的,我认为你是对的,所以我会赞成另一个答案。我今天学了些新东西!你认为@user2357112 的做法会在任何地方发布吗?他没有这样称呼它,这似乎是解决其他人可能也想解决的问题的一种非常聪明的方法。
    猜你喜欢
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多