转载:https://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E6%B5%81%E6%9C%80%E5%B0%8F%E5%89%B2%E5%AE%9A%E7%90%86
推荐书
1.“最大流最小割”定理
定义
令N = (V, E)为一个网络(有向图)并且有s, t ∈ V 为N的源点和目标点。
最大流
定义: 一条边的容量是一个映射c : E → R+,记做 cuvcuv 或者 c(u, v),代表着能通过这条边的最大的流量。
定义: 一个流是一个映射 f : E → R+,记做 fuv fuv 或者 f (u, v)。每一条流有以下两个限定条件:
-
1. 流量限制:
-
{\displaystyle \forall (u,v)\in E:\qquad f_{uv}\leq c_{uv}}
-
2. 流量守恒:
-
{\displaystyle \forall v\in V\setminus \{s,t\}:\qquad \sum \nolimits _{\{u:(u,v)\in E\}}f_{uv}=\sum \nolimits _{\{u:(v,u)\in E\}}f_{vu}.}
定义: 流的流量的定义是
-
{\displaystyle |f|=\sum \nolimits _{v\in V}f_{sv},}
s为N的源点,代表着从源点流向目标点的流量。
-
最大流问题:计算
| f | 的最大值。即从s到t的最大流量。
最小割
定义:一个 s-t 割 C = (S, T) 是一种 V 的划分可以使 s ∈ S 并且 t ∈ T。C 的割集是集合
-
{\displaystyle \{(u,v)\in E\ :\ u\in S,v\in T\}.}
注意如果 C 的割集中的边被移除了, | f | = 0.
定义: 一个s-t割的容量是
-
{\displaystyle c(S,T)=\sum \nolimits _{(u,v)\in (S\times T)\cap E}c_{uv}=\sum \nolimits _{(i,j)\in E}c_{ij}d_{ij},}
其中 {\displaystyle d_{ij}=1} 如果 {\displaystyle i\in S} 并且 {\displaystyle j\in T}, 0 反之。
-
最小 s-t 割问题: 计算
c(S, T) 的最小值。即找到 S 和 T 使 S-T 割的容量达到它的最小值。
2.Ford-Fulkerson方法对邻接矩阵进行标记
3.搜索增广矩阵时采用Edmonds_Karp算法