最大流-Edmonds-Karp算法
来源:互联网 发布:导出来的sql带双引号 编辑:程序博客网 时间:2024/04/20 07:08
#include<iostream>#include<queue>using namespace std;const int maxn=205;const int inf=0x7fffffff;int r[maxn][maxn]; //残留网络,初始化为原图bool visit[maxn];int pre[maxn];int m,n;bool bfs(int s,int t) //寻找一条从s到t的增广路,若找到返回true{ int p; queue<int > q; memset(pre,-1,sizeof(pre)); memset(visit,false,sizeof(visit)); pre[s]=s; visit[s]=true; q.push(s); while(!q.empty()) { p=q.front(); q.pop(); for(int i=1;i<=n;i++) { if(r[p][i]>0&&!visit[i]) { pre[i]=p; visit[i]=true; if(i==t) return true; q.push(i); } } } return false;}int EdmondsKarp(int s,int t){ int flow=0,d,i; while(bfs(s,t)) { d=inf; for(i=t;i!=s;i=pre[i]) d=d<r[pre[i]][i]? d:r[pre[i]][i]; for(i=t;i!=s;i=pre[i]) { r[pre[i]][i]-=d; r[i][pre[i]]+=d; } flow+=d; } return flow;}int main(){ while(scanf("%d%d",&m,&n)!=EOF) { int u,v,w; memset(r,0,sizeof(r));/// for(int i=0;i<m;i++) { scanf("%d%d%d",&u,&v,&w); r[u][v]+=w; } printf("%d\n",EdmondsKarp(1,n)); } return 0;}
算法思想:从源点开始搜寻增广路径,则沿增广路径可增加流量,每搜寻到一条增广路径增加相应流量,最后结果即为最大流。具体思路可参考下面博客,简单易懂。
源码博客:http://blog.sina.com.cn/s/blog_6cf509db0100uy5n.html
0 0
- 最大流-Edmonds-Karp算法
- 网络流最大流 Edmonds-Karp算法
- 网络流 最大流 Edmonds-Karp算法
- Edmonds-Karp算法,网络流最大流
- 最大流 - Edmonds-Karp 增广路算法
- 最大流算法模板 Edmonds—Karp
- 最大流问题 Edmonds-Karp算法
- 最大流Edmonds-Karp算法模版
- [最大流]增广路算法Edmonds-Karp
- 最大流的Edmonds-Karp算法
- edmonds-karp算法求最大流
- edmonds-karp求最大流
- Edmonds-Karp法最大流
- 最大流Edmonds-Karp模板
- 网络最大流-Edmonds-Karp
- 算法导论—最大流(Edmonds-Karp算法)
- 网络流(最大流---Edmonds-Karp算法)
- Edmonds-Karp算法_网络流_最大流问题
- dump_stack 和 trigger_all_cpu_backtrace
- [Linux]常用命令
- c++ Constructor FAQ 续
- 从HTML代码中提取文字,去掉HTML的标记
- 负载均衡(LB)详解
- 最大流-Edmonds-Karp算法
- 必须使用“控制面板”中的“打开或关闭Windows 功能”安装或配置microsoft.NET framework 2.0 SP2
- ul li
- 信息系统开发与管理(一)
- Redis配置详解
- 《操作系统概念第六版》阅读笔记一 操作系统组成
- 管道和重定向
- Android4.2_Launcher_IconCache
- hibernate连接数据库出现错误