2015-12-21 36 views
3

我最近在亚马逊采访中遇到了一个问题,并想知道堆栈溢出的相同意见。如何检测定向图中周期的循环

问题是

输入:通过邻接表表示有向图

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

实施例:
Cycle in a cycle

在上述图中的一个可以看到有2个cylces C-> D-> E-> F-> G-> H-> C和另一个周期表示以H - > I-> J-> G-> H ..我们可以看到这2个周期的边缘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遍历)所有周期,并且一旦检测到在保持哈希映射有边缘。然后,当发现另一个周期时,我再次推他们在散列。这被礼貌地拒绝了,他没有进一步讨论就进一步采访了。然后我发现找到所有的周期是一个难题。我很困惑 。有人可以澄清。

+0

一个基本周期检测首先被问及我用dfs方法编码,他对此感到满意。 – MAG

+1

有关于图论的标准书籍,其中包括图表中检测周期的算法。 – MWiesner

+0

如果我无法表达问题,我很抱歉。需要的输出是这个图在一个循环中有一个循环,如果是,那么这些循环是什么。我更新了他想要的结果的问题。 – MAG

回答

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