【发布时间】: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 方法对其进行了编码,他对此很满意。
-
图论有一些标准书籍,其中包括检测图中循环的算法。
-
如果我无法表达这个问题,我很抱歉。所需的输出是该图是否在一个循环中有一个循环,如果是,这些循环是什么。我已经用他想要的结果更新了问题。