如何在有向图中检测循环中的循环

时间:2015-12-21 20:43:50

标签: algorithm graph

我最近在亚马逊的采访中得到了一个问题,并希望知道堆栈溢出的观点。

问题是

输入:由邻接列表

表示的有向图

需要输出:此图表在一个周期中是否有一个周期,如果是,那么这些周期是什么。 循环条件中的循环定义如下:在图形和图形中有2个循环C1和C2。这两者共享一个或多个边,然后它们将被称为循环中的循环。

下面的例子:
Cycle in a cycle

在上面的图中可以看到存在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遍历)并且一旦检测到在哈希映射中保持边缘。然后当找到另一个循环时,我再次将它们推入哈希。这被礼貌地拒绝了,他在采访中进一步讨论,没有进一步讨论。然后我认为找到所有周期都是一个难题。我很迷惑 。有人可以澄清一下。

1 个答案:

答案 0 :(得分:1)

  1. 查找所有周期
  2. 检查每对循环边缘之间的非空交点(如果交点不为空,则两个循环是一个循环中的循环)