图表

时间:2016-04-17 21:10:57

标签: graph-algorithm

我在图表上应用DFS并维护每个节点的状态(已发现/未发现,已处理/未处理)。当我在DFS堆栈中放置一个新节点时,它的状态被发现但未被处理。当从Dfs堆栈中删除节点时,会发现并处理其状态。 假设我在DFS中从X访问一个新节点Y,这是我检测周期的条件。

if(discovered(y) && !processed(y))

这种情况对于有向图是否正确?

1 个答案:

答案 0 :(得分:2)

是的,我相信它是。我的理由是检查节点的可能状态,如下所示:

  • y未被发现(并且未被处理) - 我们从未在这里 - >不是一个周期
  • y被发现但未被处理 - 我们正在处理此节点,因此,我们处于其后代 - >我们找到了一个周期
  • y被发现但已被处理 - 我们已经处理了y并且所有路径都来自它,所以我们不能处于它的下降 - >不是一个周期