最短周期是具有最小边数的周期。
例如,给出一个图表:
最短的周期是:ACDA,DABD
如果我只需要找到一个最短周期,我就会在每个顶点上运行BFS并跟踪最小周期。但我不知道如何列举所有最小的周期。
在有向图中列举最小周期时存在类似的SO question,但是最小周期是不是较小周期的并集的周期。在这里,我只寻找具有最小边数的循环。
答案 0 :(得分:0)
按照拓扑排序运行多个DFS搜索:从随机顶点开始,只要有一些未探测的顶点,就继续运行新的DFS搜索。
在搜索中,一旦找到后边缘,就会知道(1)周期(2)是该周期中的边数。如果您还需要获取循环中的边缘列表,请为每个“当前检测到的循环”保留一个数组,并在DFS调用图中回溯时填充它。如果后沿是节点A-> B,当你到达节点B时,数组将包含循环中的所有边。
当然,请跟踪“到目前为止发现的最短周期”,以避免超过此最小值的周期的簿记边缘列表。