【问题标题】:How to detect cycle in a cycle in a Directed graph如何在有向图中检测循环中的循环
【发布时间】:2016-03-28 00:26:58
【问题描述】:

我最近在亚马逊面试中遇到了一个问题,想知道堆栈溢出对此的看法。

问题是

输入:邻接表表示的有向图

需要输出:这个图在一个循环中是否有一个循环,如果是,这些循环是什么。 循环条件中的循环定义如下:图中有 2 个循环 C1 和 C2 并且这两个循环共享一条或多条边,则称为循环中的循环。

示例如下:

在上图中可以看到有 2 个循环 C->D->E->F->G->H->C 和另一个循环表示为 H->I->J->G-> H .. 我们可以看到这两个循环的边 G->H 作为共享边,因此我们可以将它们称为循环中的循环。

So tha answer will be yes there are cycles in a cycles and
 the cyles are  C->D->E->F->G->H->C and H->I->J->G->H

我在采访中的方法是检测所有循环(通过 DFS 遍历),一旦检测到,就在哈希图中保持边缘。然后当找到另一个循环时,我再次将它们推入 hash 。这被礼貌地拒绝了,他在采访中走得更远,没有进一步讨论。然后我认为找到所有周期是一个难题。我很迷惑 。有人可以澄清一下。

【问题讨论】:

  • 首先询问了基本的循环检测,我用 dfs 方法对其进行了编码,他对此很满意。
  • 图论有一些标准书籍,其中包括检测图中循环的算法。
  • 如果我无法表达这个问题,我很抱歉。所需的输出是该图是否在一个循环中有一个循环,如果是,这些循环是什么。我已经用他想要的结果更新了问题。

标签: algorithm graph


【解决方案1】:
  1. 查找所有循环
  2. 检查每对循环的边缘之间的非空交叉点(如果交叉点不为空,则两个循环是一个循环中的一个循环)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多