【网络流】最大流最简单的Ford-Fulkerson算法
来源:互联网 发布:创维网络电视怎么放dvd 编辑:程序博客网 时间:2024/06/05 08:47
Ford-Fulkerson算法是一个非常好理解的算法。大概是这样子的:
①不断从起点开始dfs 找一个通向终点的路。如果一条都找不到了,那么当前的值就是最大流
②如果还存在着通向终点的路,那么加上它的最短的一截,然后做出图的残余图。继续。
下面是基于邻接矩阵的Ford-Fulkerson最大流算法。简单易懂,老少皆宜。
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int map[300][300];int used[300];int n,m;const int INF = 1000000000;int dfs(int s,int t,int f){ if(s == t) return f; for(int i = 1 ; i <= n ; i ++) { if(map[s][i] > 0 && !used[i]) { used[i] = true; int d = dfs(i,t,min(f,map[s][i])); if(d > 0) { map[s][i] -= d; map[i][s] += d; return d; } } }}int maxflow(int s,int t){ int flow = 0; while(true) { memset(used,0,sizeof(used)); int f = dfs(s,t,INF);//不断找从s到t的增广路 if(f == 0) return flow;//找不到了就回去 flow += f;//找到一个流量f的路 }}int main(){ while(scanf("%d%d",&m,&n) != EOF) { memset(map,0,sizeof(map)); for(int i = 0 ; i < m ; i ++) { int from,to,cap; scanf("%d%d%d",&from,&to,&cap); map[from][to] += cap; } cout << maxflow(1,n) << endl; } return 0;}
1 0
- 【网络流】最大流最简单的Ford-Fulkerson算法
- 最大网络流的Ford-Fulkerson 算法
- 求解最大流的 Ford-Fulkerson 算法
- 最大流 Ford-Fulkerson算法
- 网络流--ford-fulkerson算法
- 增广路算法 Ford-Fulkerson算法 网络最大流问题
- 网络流之最大流算法(ford-fulkerson)
- 网络流——最大流/Ford-Fulkerson算法
- 网络流最大流之Ford-Fulkerson算法
- 最大网络流(Ford-Fulkerson算法)(hihicoder)
- 最大流问题:最大流的Ford-Fulkerson算法
- 最大网络流之Ford-Fulkerson算法和ScalingFord-Fulkerson算法
- Ford-Fulkerson(最大流)
- hdu 3549最大流Ford-Fulkerson算法
- 最大流之Ford-Fulkerson算法
- 最大流问题(Ford-Fulkerson算法)
- 最大流 Ford-Fulkerson算法模板
- 最大流算法之Ford-Fulkerson
- 各种数字调制解调的波形
- Win7 在安装vs2010后向sql2008添加SQL_Server_Management详解
- 函数返回值为指针的一个陷阱(使用inet_ntoa函数时遇到的问题)
- 12c 用户密码已经过期,不修改密码的情况下使其永远使用下去
- RecyclerView 实例
- 【网络流】最大流最简单的Ford-Fulkerson算法
- 华为OJ之高级篇
- Linux笔记12-Shell基础
- 第三天 ThinkPHP手把手快速拼接网站(三)
- js for循环中的闭包
- WPF-常用布局容器
- URL中“#” “?” &“”号的作用
- 第四章t5
- 我应该使用哪种wsdl样式?