屈婉玲《算法设计与分析》第2版第7章网络流算法学习笔记。
概述
最小费用流的负回路算法,是先任意分配流量v0,再将流量调整到权值较小的边上,参考:
而最小费用流的最短路径算法,则是从0流开始,往最短路径上分配流量,直到流量达到v0为止。
最小费用流的最短路径算法图例
容量-费用网络,初始分配0流:
找出残余容量网络上的最短路径:s->2->t(距离为4),分配5个单位流量,得到f1:
更新残余网络找出最短路径:s->1->2->t (距离为5),分配1个单位流量,得到f2:
更新残余网络找出最短路径:s->1->t (距离为6),分配2个单位流量(v0-f2=2),得到f3:
至此流量达到v0,f3即为所求。
伪代码
1. f ← 0
2. 构造N(f)
3. 调用Floyd算法计算N(f)中s-t最短路径
4. if N(f)无s-t路径 then return “无流量v0的可行流” //f是最大流,且v(f)<v0
5. 在N(f)的s-t增广路径中找出最短路径
6. 为最短路径尽可能分配流量,且不超过v0,f ← f1
7.