找到包含特定边的最小重量循环

时间:2015-06-03 18:43:35

标签: algorithm graph

给出一个图表: - 面向, - 强烈联系和 - 称重(重量均为正值) 我必须编写一个函数作为输入边(u,v),计算包含该边的最小权重周期的权重。

我以为我的行为如下,但程序不准确且不完整: - 从节点u开始进行bfs访问 - 保持变量的临时重量 - 当您到达v时,请选择以前的最小重量。 如何跟踪以前的重量?如何编写伪代码?

我不知道怎么开始所以有人帮助我?

由于

1 个答案:

答案 0 :(得分:1)

这可以缩减为Shortest Path Problem

找到从vu的最短路径,然后包含(u,v)的最短周期为v->...->u->v,其中v->...->u是最短路径通过最短路径算法找到的vu

使用Dijkstra's Algorithm可以有效地解决这个问题,因为图中没有负权重。

正确性证明:

假设周期较短v1->v2->...vi->u->v->v_i+1->...->vn->v1。让我们说它权重x < d(v,u) + w(u,v)
由于它是一个循环,我们可以将其视为v->v_i+1->....->vn->v1->...->vi->u->v
周期的权重没有变化,仍然是x。这意味着x=w(v,v_i+1) + ... + w(vn,v1) + ... + w(v_i-1,vi) + w(vi,u) + w(u,v)
但这给了我们w(v,v_i+1) + ... + w(vn,v1) + ... + w(v_i-1,vi) + w(vi,u) + w(u,v) - w(u,v) < d(v,u),我们发现从vu的路径比d(v,u)更短,这与Dijkstra算法的正确性相矛盾。< / p>

QED