网络流,最基础的增广路算法!
来源:互联网 发布:ubuntu 13.04安装失败 编辑:程序博客网 时间:2024/05/29 20:00
哈哈,我的第一个网络流!
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int MAXN = 1005;const int INF = 0x7ffffff;struct edge_{ int c, f;}edge[MAXN][MAXN];int n, m;int flag[MAXN], pre[MAXN], alpha[MAXN], que[MAXN];int h, t, v, u;int ford(){ while(1){ memset(flag, -1, sizeof(flag)); memset(pre, -1, sizeof(pre)); memset(alpha, -1, sizeof(alpha)); flag[0] = 0, pre[0] = 0, alpha[0] = INF; t = 0, h = 1; que[t] = 0; while(t < h && flag[n - 1] == -1){ u = que[t], t++; for(v = 0; v < n; v ++){ if(flag[v] == -1){ if(edge[u][v].c < INF && edge[u][v].f < edge[u][v].c){ flag[v] = 0, pre[v] = u; alpha[v] = min(alpha[u], edge[u][v].c - edge[u][v].f); que[h] = v, h++; } else if(edge[v][u].c < INF && edge[v][u].f > 0){ flag[v] = 0, pre[v] = -u; alpha[v] = min(alpha[u], edge[v][u].f); que[h] = v, h++; } } } flag[u] = 1; } if(flag[n - 1] == -1 || alpha[n - 1] == 0) break; v = n - 1, u = abs(pre[v]); int a = alpha[v]; while(1){ if(edge[u][v].f < INF) edge[u][v].f += a; else edge[v][u].f -= a; if(v == 0) break; v = u, u = abs(pre[v]); } } int maxFord = 0; for(int i = 0; i < n; i++) for(int j = 0; j < n; j++){ if(i == 0 && edge[i][j].f < INF) maxFord += edge[i][j].f; if(edge[i][j].f < INF) printf("%d -> %d : %d\n", i, j, edge[i][j].f); } return maxFord;}int main(){ freopen("in.in", "r", stdin); int u, v, c, f; cin>> n >> m; for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) edge[i][j].c = edge[i][j].f = INF; for(int i = 0; i < m; i++){ cin>> u >> v >> c >> f; edge[u][v].c = c; edge[u][v].f = f; } cout<< ford() <<endl; return 0;}
- 网络流,最基础的增广路算法!
- 基于增广路的网络流算法
- 网络流DINIC增广路算法介绍
- 网络流之增广路算法
- 网络最大流求解 增广路算法
- 最短增广路算法
- 网络流之 最短增广路算法模板(SAP)
- 增广路算法 Ford-Fulkerson算法 网络最大流问题
- 网络流增广路Edmonds-Karp算法 与 Dinic算法
- 求最大流的使用距离标号的最短增广路算法
- 最大流的增广路算法比较
- 网络流之最大流的增广路径算法
- 网络流初步 增广路算法求最大流 hdoj3549
- 网络流初步之最大流(增广路算法)
- 网络流——最大流增广路算法
- 模板---图论:网络流增广路算法 Dinic
- 网络流 之 一般增广路算法 标号法实现
- 增广路算法(网络流) HDU1532 Drainage Ditches
- ios7 tweak
- LCA问题(含RMQ的ST算法)
- _IO, _IOR, _IOW, _IOWR 宏的用法与解析
- 当程序员难,当初级程序员(菜鸟都不是的)更难
- C#异常处理新手学习
- 网络流,最基础的增广路算法!
- Opencv中的数据存储(1)
- HTML5 WebSocket的使用及例子
- QMainWindow动态切换CentralWidget
- web二三维联动
- Query中.html(“xxx”)和.append("xxx")有什么区别和不同
- C++虚析构函数
- jboss发布基本流程
- Java并发编程学习2