博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络流---最大流(Edmond-Karp算法)的学习
阅读量:4969 次
发布时间:2019-06-12

本文共 1265 字,大约阅读时间需要 4 分钟。

先上个代码,等有空补充详解

#include
#include
#include
#include
#include
#include
using namespace std;const int maxn = 1010;const int INF = 0x3f3f3f3f;int Map[maxn][maxn];int maxflow,n,m;int pre[maxn],flow[maxn];int start,end;void init(){ maxflow=0; memset(Map,0,sizeof(Map)); memset(flow,0,sizeof(flow)); memset(pre,-1,sizeof(pre));}void input(){ int u,v,w; start=1; end=n; while(m--){ cin>>u>>v>>w; if(u==v)continue;//起点和终点不可相等 Map[u][v]+=w;//存在u和v之间有多条边 }}int bfs(){ queue
q; q.push(1); pre[1]=0; flow[1]=INF; while(!q.empty()){ int u=q.front(); q.pop(); if(u==end)break; for(int i=1;i<=n;i++){ if(i!=start&&pre[i]==-1&&Map[u][i]>0){ flow[i]=min(flow[u],Map[u][i]); pre[i]=u; q.push(i); } } } if(pre[end]==-1)return -1;//如果找不到增广路,返回-1 else return flow[end];} void ek(){ int ff=0; while(1){ ff=bfs();//bfs寻找增广路 if(ff==-1)break;//如果找不到增广路,退出循环 maxflow+=ff;//加到最大流中 int k=n; while(k!=1){//利用前驱寻找路径 Map[pre[k]][k]-=ff; Map[k][pre[k]]+=ff; k=pre[k]; } memset(pre,-1,sizeof(pre));//再次初始化 memset(flow,0,sizeof(flow)); } cout<
<
>n>>m;//n个顶点,m条边 init();//初始化 input();//输入 ek();//ek算法流程 return 0;}/*4 51 2 51 3 52 3 52 4 53 4 5*/

 

 

 

 

转载于:https://www.cnblogs.com/lived-hu/p/9838904.html

你可能感兴趣的文章
将github上托管的代码 在我的域名下运行
查看>>
【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize
查看>>
【codeforces 767A】Snacktower
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
执行了的程序,才是你的程序.
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>
ubuntu16系统磁盘空间/dev/vda1占用满的问题
查看>>
grid网格布局
查看>>
JSP常用标签
查看>>
九涯的第一次
查看>>
处理器管理与进程调度
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>
java if 用法详解_Java编程中的条件判断之if语句的用法详解
查看>>
java 什么题目好做_用java做这些题目
查看>>
matlab sin函数 fft,matlab的fft函数的使用教程
查看>>
mysql adddate()函数
查看>>