最大流问题是在给定的流网络中,找到从源点到汇点的最大可能流量。这是一个经典的图论问题,有广泛的应用。
- 流网络:有向图,每条边有容量限制
- 流:满足容量约束和流量守恒的边流量分配
- 源点和汇点:流的起点和终点
- 最大流:从源点到汇点的最大可能流量
常用的最大流算法包括:
- Ford-Fulkerson:使用DFS寻找增广路径
- Edmonds-Karp:使用BFS寻找增广路径(保证多项式时间)
- Dinic:使用层次图和多路增广(更高效)
定理:在任意流网络中,最大流的值等于最小割的容量。
这意味着:
- 最大流 = 最小割
- 可以通过求解最大流来找到最小割
- 反之亦然
- Ford-Fulkerson: O(E * max_flow)
- Edmonds-Karp: O(VE²)
- Dinic: O(V²E)
| 语言 | 文件名 |
|---|---|
| C | max_flow.c |
| Java | MaxFlow.java |
| Go | max_flow.go |
| Python | max_flow.py |
| JavaScript | max_flow.js |
| Rust | max_flow.rs |
| TypeScript | MaxFlow.ts |
- 网络流量优化
- 供应链管理
- 匹配问题
- 图像分割
- 电路设计