用于正回路的Bellman-Ford算法

时间:2015-07-09 13:03:08

标签: algorithm graph shortest-path bellman-ford

我正在开发一个带有有向图的项目,其中边的权重都取决于变量x。 我试图找到x的最小值,这样我的图表就不包含任何正权重的电路。

我的问题是 - 它可能很愚蠢,但我不知道如何 - : 如何使用修改后的Bellman-Ford来检查是否存在正电路而不是负电路?

感谢。

2 个答案:

答案 0 :(得分:0)

  

如何使用经过修改的Bellman-Ford检查是否存在   正电路而不是负电路?

将所有权重更改为负值:

w'(u,v) = -w(u,v)

然后简单地运行常规BF。

您可以对该值x运行二进制搜索,以查找负循环所需的最小值,例如,在O(logx) BF的调用中。

找到制作负周期所需的最小权重(u,v)的更有效的解决方案是删除该边缘,找到从vu的最短路径。 / p>

现在,你可以知道边缘的权重应该是什么,以获得一个权重0的循环,(-d(v,u)),除此之外的任何东西 - 你有一个正循环,少 - 负循环。

答案 1 :(得分:0)

如果你想找到最短的路径并且不想使用负边缘,你可以使用与Bellman-Ford几乎相似的Dijkstra算法。

但是,如果您只想访问权重可能较低的边缘,可以查看“Prim算法”或“Kruskall算法”,这些算法用于查找图形的“最小生成树(MST)”。

Dijkstra Algorithm

Prim's Algorithm

Kruskal's Algorithm