在有向图中识别作为循环成员的所有节点的最有效方法是什么?

时间:2016-04-08 17:38:49

标签: graph-algorithm

我有一个没有自循环的有向多图:

Multigraph

将节点1,2和3标记为循环成员的最有效方法是什么?

我的第一个想法是

  1. 从任意节点开始执行深度优先搜索
  2. 将我在给定分支中看到的所有节点推送到“看到”的数组中。另外,将每个节点标记为“已检查”。
  3. 对于每个新节点,检查其中的任何子节点是否在所见的数组中
  4. 如果是,则在看到的节点和之前出现的节点之间标记数组中的每个节点
  5. 沿着DFS旅行时,一定要跳过任何看过的孩子
  6. 使用尚未标记为“已检查”的下一个节点重复1-5(因为我可能已断开图表的区域)
  7. 这看起来似乎有用,但是想知道它是否是最有效的方式,请给我保持一个“看到”节点的数组,并且,因为必须递归调用,我想我可能是做了很多数组修改(例如,在我的算法中的某一点,我将[0,1,2,3,1]和另一个点我将[0,1,2,3,4],为上面的图表,所以它不仅仅是“构建一次”)。我还必须在开始时通过列表额外的时间来删除可能在之前的测试中遗留的“已检查”标记。

0 个答案:

没有答案