有向图的最小流量最大费用

关于最小费用最大流的问题描述,这个ppt讲的很好   https://wenku.baidu.com/view/38c158d4c1c708a1284a44af.html

初始化费用矩阵和链路容量矩阵,费用矩阵中如果两个点之间不相连,则代价为inf,而链路容量矩阵中两个点不直连,则链路容量为0.

然后怎样在迭代中更新费用矩阵,有三条规则:

1、如果某条链路没有任何流量通过,则该条链路的费用不变。

2、如果某条链路上有流量但不饱和,则该条链路原本的前向链路的代价为a的话,则反向添加一条链路,其代价为-a。(例如原本图中是点i到j,费用为a,则现在代价矩阵中添加一条从j到i的链路,代价为-a),具体理解:称i到j为前向链路,j到i为后向链路,这样表明,如果后面继续会从前向链路上增加流量的话,费用会增加a*走过的流量,如果链路一开始走多了,那么要回退,即走后向链路,那么费用会以-a*退的流量而减少。

3、如果某条链路达到饱和,那么原来前向链路的费用为inf(即断开),后向链路的费用为-a,表示已经不能再从前向链路增加流量了,只能从后向退回原来多走的流量。


然后更新完代价矩阵之后,再根据实际走的流量情况更新走的流量矩阵。最终完成迭代,得到最小费用最大流。

附上matlab代码:

function [ f,MinCost,MaxFlow ] = MaxFlowMinCost( a,c,V,s,t )
%% 输入参数列表
%  a        单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值