给出一个图表: - 面向, - 强烈联系和 - 称重(重量均为正值) 我必须编写一个函数作为输入边(u,v),计算包含该边的最小权重周期的权重。
我以为我的行为如下,但程序不准确且不完整: - 从节点u开始进行bfs访问 - 保持变量的临时重量 - 当您到达v时,请选择以前的最小重量。 如何跟踪以前的重量?如何编写伪代码?
我不知道怎么开始所以有人帮助我?
由于
答案 0 :(得分:1)
这可以缩减为Shortest Path Problem:
找到从v
到u
的最短路径,然后包含(u,v)
的最短周期为v->...->u->v
,其中v->...->u
是最短路径通过最短路径算法找到的v
到u
。
使用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)
,我们发现从v
到u
的路径比d(v,u)
更短,这与Dijkstra算法的正确性相矛盾。< / p>
QED