繁体   English   中英

有向图 - 如何计算图中每个其他顶点可到达的顶点数?

[英]Directed Graph - How to count the number of vertices from which each other vertex in graph is reachable?

在有向图中如何有效地计算图中每个其他顶点可到达的顶点数?

如果图中没有循环,则只能有一个这样的顶点并且它具有度为零,并且没有其他具有度为零的顶点。 然后,您必须运行DFS以检查是否可以从其中访问所有其他顶点。 所以答案是一个或零,取决于DFS的结果。

如果存在循环,则循环中的所有顶点都具有此属性,或者它们都没有。

如果检测到一个循环,则用一个顶点替换循环中的所有顶点,并为该顶点保留一个标签,表示它所代表的顶点数。 使用与上面相同的步骤。 即,检查度数并从新节点运行DFS。 答案是零或标签。

可以使用DFS完成检测循环。

图中可能有几个周期。 在这种情况下,你必须消除所有这些。 您可以在DFS的一次线性传递中消除所有这些,但这很棘手。 您也可以使用他的答案中的btilly建议的Tarjan算法。

使用Tarjan的强连接组件算法来检测所有循环,然后构建一个图,每个强连接组件都折叠到一个节点。

现在在这个新图中,找到一个没有边的顶点就足够了。 如果该顶点连接到每个其他顶点(可通过宽度优先的线性搜索进行验证),那么它所来自强连接组件中的所有内容都在您的集合中,否则您的集合中没有顶点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM