网络流--反向弧(EdmondsKarp中背向边的作用)

网络流–反向弧(背向边的作用)

今天来讲一讲网络流中背向边的作用,相信大家对下面代码很熟悉
void AddEdge(int from,int to,int cap){
edges.push_back(Edge(from,to,cap,0));
edges.push_back(Edge(to,from,0,0)); //背向边
m=edges.size();
G[from].push_back(m-2);
G[to].push_back(m-1);
}
很多人不明白 edges.push_back(Edge(to,from,0,0));中的0 ,0是什么意思,初学者会误认为容量和实际流量都设为0并没有意义。
但实际上这里的容量为0是针对于背向边实际流量为负数而设置的含义。

下面请看这张图:
在这里插入图片描述
图1到图2的过程很好理解,接下来是重点,如果没有背向边(也就是没有图中的一切红线),我们无法从1->3->4->2->5->6了,因为4->2的可增广流量已经为0,这个时候就体现了背向边的作用了,看见图2中4->2的红线了没,它在图中虽然是用红笔标注的正2,但在代码中他其实是-2,也就是说可以从4走到2,因为4到2的容量为0-(-2)=2,这个时候就体现出了背向边的作用, 理解了这个,就不难看懂图2到图3中构造的从1->3->4->2->5->6的路径了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值