在有向图中寻找最短周期的算法

时间:2016-01-10 08:35:11

标签: algorithm graph digraphs

最短周期是具有最小边数的周期。

例如,给出一个图表:

enter image description here

最短的周期是:ACDA,DABD

如果我只需要找到一个最短周期,我就会在每个顶点上运行BFS并跟踪最小周期。但我不知道如何列举所有最小的周期。

在有向图中列举最小周期时存在类似的SO question,但是最小周期是不是较小周期的并集的周期。在这里,我只寻找具有最小边数的循环。

1 个答案:

答案 0 :(得分:0)

按照拓扑排序运行多个DFS搜索:从随机顶点开始,只要有一些未探测的顶点,就继续运行新的DFS搜索。

在搜索中,一旦找到后边缘,就会知道(1)周期(2)是该周期中的边数。如果您还需要获取循环中的边缘列表,请为每个“当前检测到的循环”保留一个数组,并在DFS调用图中回溯时填充它。如果后沿是节点A-> B,当你到达节点B时,数组将包含循环中的所有边。

当然,请跟踪“到目前为止发现的最短周期”,以避免超过此最小值的周期的簿记边缘列表。