流网络 c++实现

文章介绍了流网络的概念,包括其构成元素如源点、汇点和容量,以及可行流的条件——容量限制和流量守恒。最大流最小割定理指出,在任何网络中,最大流的值等于最小割的容量。文章通过逐步展示寻找通路和更新最小割边集合的过程,解释了如何求解最小割和最大流。
摘要由CSDN通过智能技术生成

概述

流网络,能够模拟物质流动,如输送线,供水或产品运输,并找到最大流量。
特点:是一个有向图,且可以有环,不考虑反向边(即使有反向边,也可以通过加点来把一条反向边,变成两条单向边)。
组成:源点,容量,汇点。
源点S可以认为是起点,类比与水库,可以源源不断地向外输水。
容量可以理解为离散数学的边权,类比与流速即单位时间内流过的最大的水量的大小。如果边不存在则认为容量是0。
汇点t可以认为是终点,类比与大海,从水库里流出来的水,会源源不断的流向大海。
在这里插入图片描述

可行流

条件:当同时满足以下两个条件时,这条边可以成为可行流。
1.容量限制:也就是说你设定的流量不能够超过容量。即0<=f(u,v)<=C(u,v)
2.流量守恒:规定除了源点和汇点都不能储存流量,也就是说除了源点和汇点,剩下的节点都应该入多少流量,出多少流量,达到流量守恒。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于一个可行流,每秒从源点流向汇点的流量的值/速率记作:
|f|=每秒从源点流出的流/每秒流入汇点的流量
即往外流的流量流回去的流量:
在这里插入图片描述

在这里插入图片描述

最大流最小割定理

在这里插入图片描述
描述:割其实就是把节点分成两部分(S,T),而且s位于S中,t位于T中。
在这里插入图片描述
举例:
在这里插入图片描述

最小割问题

定义:找到一个最小capacity的(S,T)cut。

最大流(都是对于节点来说)

对于一个流网络来说会有非常多的可行流,每一个可行流都可以求出一个流量值,这些流量值构成的集合中,流量最大的那个,就是最大流,即最大可行流。
即所有可行流中流量值最大的可行流。
在这里插入图片描述

最大流最小割(Max-flow min-cut)定理

在任何网络中,最大流的值=最小割的capacity。

关系:如果流f等于cut(S,T)capacity,则f是最大流,(S,T)是最小割。
按本文描述算法对最初的图进行最小割求解。
转载:https://www.jianshu.com/p/beca253fdc9f

步骤1:寻找第一个通路
在这里插入图片描述
红色字体表示该通路的通路流量。根据算法进行容量修正:
图5:第一条通路容量修正
修改后的容量是用红色字体表示。在此通路中,AC边容量为0,所以将该边加入最小割边集合{AC},同时记录影响边信息,SA的影响边{AC},CT的影响边{AC}。

步骤2:寻找第二条通路:
图6:第二条通路标记
图7:第二条通路容量修正
此时,最小割边集合为{AC,DT}

步骤3:寻找第三条通路:
图8:第三条通路标记
图9:第三条通路容量修正

此时最小割边集合为:{AC,DT,DC}

此时,已经不再存在通路,所以当前最小割边集合就是求解的最小割,其代价为23。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yhaida

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值