[图论]最大流问题(网络流最大流EK算法 BFS)
来源:互联网 发布:windows insider iso 编辑:程序博客网 时间:2024/04/29 21:13
/*Name:最大流问题 (网络流最大流EK增广路 BFS)Actor:HTTime:2015年8月15日Error Reporte:*/#include <iostream>#include <stdio.h>#include <conio.h>#include <string.h>#include <vector>#include <algorithm>#define N 50#define INF 0x3f3f3f3fusing namespace std;//最大流——EK增广路算法://每次只找一条增广路,//而后更新残图,//在残图中寻找可行增广路,//所有的增广路汇到一起就是结果流。//每条增广路走的流量为改路中最窄流量。int flow[N][N];//残余网络的流量int cap[N][N];//网络流量限制int pa[N];//记录每次来源父节点int pas[N];//记录每次到所有点处最小残量int ans;//总流量int front, rear;int que[N];int s, t;int main(){int i, j;int n;int a, b, l;int temp;while (scanf("%d %d", &t, &n) != EOF){memset(flow, 0, sizeof(flow));memset(cap, 0, sizeof(cap));for (i = 0; i < n; i++){scanf("%d %d %d", &a, &b, &l); cap[a][b] = cap[b][a] = l;}s = 1;ans = 0;for (;;)//开始刷图{memset(pas, 0, sizeof(pas));pas[s] = INF;front = 0;rear = 1;que[front] = s;while (front != rear)//BFS找增广路{for (i = 1; i <= t; i++){temp = cap[que[front]][i] - flow[que[front]][i];if (pas[i] != 0 || temp <= 0)//本次没有流过 并且 有剩余流量,才可以考虑continue;pas[i] = (pas[que[front]] < temp ? pas[que[front]] : temp);//补正最小值pa[i] = que[front];//记录父节点que[rear] = i;rear++;//cout << que[front]<<"----"<<i<<" "<< pas[i] << endl;}front++;}if (pas[t] == 0) break;//找不到有效增广路了,结束for (i = t; i != s; i = pa[i])//更新残图,精彩的找爹循环{flow[pa[i]][i] += pas[t];flow[i][pa[i]] -= pas[t];}ans += pas[t];//总流量记录}printf("%d\n", ans);}return 0;}
0 0
- [图论]最大流问题(网络流最大流EK算法 BFS)
- poj1459 网络最大流问题 ek算法
- 最大网络流 EK 算法
- 网络最大流 EK算法
- EK算法(网络流,最大流)
- HDOJ1532 最大流 BFS + EK 算法 模板
- 最大流问题(转载)-EK算法
- 图论 最大流EK算法
- 最大流EK算法
- 最大流EK算法
- 最大流-EK算法
- 最大流-EK算法
- 网络流——最大流问题 EK算法
- 网络流--求最大流:EK算法
- 最大流问题(EK算法模板)
- 网络流--最大流(ek算法详解)
- 最大流(EK)
- 最大流EK算法模板
- 静态连接库与动态链接库
- HDU 2296 Ring (AC自动机 + DP)
- java学习个人笔记---java类总体初始化顺序
- As Easy As A+B
- 1085. Perfect Sequence (25)
- [图论]最大流问题(网络流最大流EK算法 BFS)
- GP规范学习(二)
- Java中的多态学习(一)
- MFC树形控件(CTreeCtrl)用法(下)
- nodejs使用md5带秘钥加密
- C语言各章节的难易程度
- elasicsearch suggest用法
- centos下源码安装LVS+ Keepalived
- 插入排序和希尔排序