我们可以使用dijkstra算法来查找任何周期

时间:2014-07-02 05:08:28

标签: data-structures graph-theory dijkstra

我们可以使用Dijkstra的算法来寻找周期吗?

  1. 负周期

  2. 正循环

  3. 如果我们可以做什么,我们必须做哪些改变?

2 个答案:

答案 0 :(得分:2)

1)Dijkstra不会处理具有负边缘的图形,因为您可以(可能)找到负无穷大的最小距离。

2)嗯,你通常在带有周期的图形上运行它(否则,你也可以遍历一棵树),所以它可以很好地处理它们。

如果您真正的问题只是寻找周期,请查看Finding all cycles in graph

答案 1 :(得分:0)

否我们不能使用Dijkstra算法,如果存在负循环,因为算法在最短路径上工作,并且对于这样的图形它是未定义的。一旦你进入负循环,你可以将你的“最短路径”的成本降低如你所愿,多次遵循负循环。

此类限制适用于在图表中查找最短路径的所有算法,这与禁止Dijkstra中所有负边缘的原因相同。

您可以修改Dijkstra以查找图表中的周期,但我认为这不是最佳做法。

相反,你可以使用: Tarjan的强连通组件算法(时间复杂度-O(| E | + | V |)) 或Kosaraju的算法(使用DFS并且是线性时间alogoritham)

或者您可以点击此链接以获得更好的想法: https://en.wikipedia.org/wiki/Strongly_connected_component

希望我回答你的问题。