使用Bellman Ford获得负循环
我必须在有向加权图中找到一个负周期。我知道Bellman Ford算法是如何工作的,它告诉我是否存在可达到的负周期。但是它没有明确命名。 如何获取循环的实际路径?v1,v2,…vk,v1v1,v2,…vk,v1v1, v2, \ldots vk, v1 应用标准算法后,我们已经进行了次迭代,因此不可能进一步改进。如果我们仍然可以降低到节点的距离,则存在负循环。n−1n−1n-1 我的想法是:由于我们知道仍然可以改善路径的边缘,并且知道每个节点的前身,因此我们可以从该边缘追溯到直到再次遇到它为止。现在我们应该有一个循环。 可悲的是,我没有找到任何可以告诉我这是否正确的论文。那么,它真的像那样工作吗? 编辑:此示例证明我的想法是错误的。给定下图,我们从节点运行Bellman-Ford 。1个11 我们按的顺序处理边缘。经过次迭代后,我们得到节点距离:n − 1a ,b ,c ,da,b,c,da, b, c, dn − 1n−1n-1 2 :- 30 3 :- 151:−51:−51: -5 2:−302:−302: -30 3:−153:−153: -15 和父表:有父有父有父 3 2 3 3 2111333 222333 333222 现在,进行第次迭代,我们发现仍可以使用边沿改善节点的距离。因此,我们知道存在一个负循环,而是其中的一部分。1 一个一个nnn111aaaaaa 但是,通过追溯到父表的方式,我们陷入了另一个负循环,再也不会相遇。一c,dc,dc, daaa 我们如何解决这个问题?