其实标题中那个又长又霸气的名字只是用来唬人的,其实这个算法非常简单
zkw算法的重点其实就是引入了一个距离标号,让程序一边更新标号求最短路,一边增广,从而使速度大幅提高
可是zkw算法中每次调整标号只增广一次,感觉有点浪费,为什么不多次增广呢?
如果说这个标号让增广的步伐加快了的话,那多路增广就能加大增广的步子,一步多跨一点,也就能让速度更快一点
我所谓的距离标号连续增广路费用流算法本质就是 zkw+多路增广
具体实现的话,可以像dinic一样,每次增广时找到一个最靠前的满流边,退到那个地方,继续做
代码量并没有大多少,速度却可以飙升
实测发现,可能卡到zkw的稠密图一般卡不到这种算法,zkw飞速的图,这个算法光速(夸张了一点。。呵呵)
测试工作在盾盾的机子上做的,图片等下再问他要,到时发上来
附关键代码:
p.s KM用到的slack优化zkw也是可以的,具体见程序(slack数组就是sl[i])
本文介绍了一种结合ZKW算法与多路增广技术的距离标号连续增广路费用流算法。该算法通过在更新标号的同时进行多路增广来提高最短路径的查找效率,从而加速整体流程。实验证明,在密集图场景下表现尤为突出。
2265

被折叠的 条评论
为什么被折叠?



