我们可以使用Dijkstra的算法来寻找周期吗?
负周期
正循环
如果我们可以做什么,我们必须做哪些改变?
答案 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
希望我回答你的问题。