algorithm - 检查图中的顶点是否属于循环

标签 algorithm graph depth-first-search

我有一个无向图(可能有多个边),我需要检查给定的顶点是否属于 O(|V|) 中的某个循环。请注意,该图可能很密集。

最佳答案

如果您可以走出某个顶点并稍后通过其他顶点返回,则该顶点将属于循环。

算法可以如下:

  1. 将当前顶点 V0 添加到已访问顶点列表 V。

  2. 当 sizeof(V) < N 时,我们将列出 V1, ..., Vk,您可以从 V0 转到它们

  3. 重复步骤 2,直到找到 V0 - 这意味着它处于循环中 - 或者直到 sizeof(V) = N 或没有新顶点可以添加到 V (图可能会断开)。 注意:重复步骤 2 意味着我们找到可以从最后添加的集合中转到的顶点列表 (V1, ..., Vk)。

通过该算法,我发现每个顶点仅检查一次,因此时间复杂度为 O(|V|)。

关于algorithm - 检查图中的顶点是否属于循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26837403/

相关文章:

python - 使用python的图形工具计算最短路径和距离的有效方法

algorithm - 这篇关于DFS算法的帖子对吗?

algorithm - graph - 如何避免在深度优先搜索中重复处理相同的边缘?

algorithm - 当某些点被阻挡时到达终点的最小跳跃次数

java - 不明白方法 "delete"在链表中是如何工作的

algorithm - 递归关系。请告诉我哪里出错了

javascript - D3 - 部分力导向图

algorithm - 二维网格上从 (0,0) 到 (N,N) 的最小成本路径

java - Java 有向图中循环检测的代码简化

c++ - 对于非常接近于零的值,双重计算运行得更慢