我有一个带有负边权重的有向图。图形被程序修改,有时会形成负循环。当这种情况发生时,最短路径算法(Bellman-ford/Johnson/Floyd-Warshall)会检测到这种负循环的存在并失败,但不会产生其他有用的信息。
我想确定是什么边导致了负循环,并不允许在图中进行此类修改。有人可以帮我指点吗?
谢谢,
保罗
我有一个带有负边权重的有向图。图形被程序修改,有时会形成负循环。当这种情况发生时,最短路径算法(Bellman-ford/Johnson/Floyd-Warshall)会检测到这种负循环的存在并失败,但不会产生其他有用的信息。
我想确定是什么边导致了负循环,并不允许在图中进行此类修改。有人可以帮我指点吗?
谢谢,
保罗
Paul,如果您要添加一条边(源、目的地、权重),并且您知道从目的地到源的距离,那么当且仅当新权重 + 旧距离为负时,您将创建一个负循环。
另一方面,如果你刚刚得到一个图,bellman-ford 算法会检测负循环,并在找到负循环时展示一个。您只需要找到一个可以做到这一点的实现(而不仅仅是失败),或者自己编写一个。这不是一个困难的算法,网上有很多伪代码。
(如果你想要一个为你定制的,这可能需要几天的咨询工作。我做这种事情是为了谋生,我很乐意这样做。)
我不确定你到底需要什么。我不知道,但我想有一个 Bellman-Ford 的在线版本,它可以在新边缘出现时以便宜的价格保持最新的距离,如果你添加一个不好的边缘,它会尖叫。