POJ1273 最大流模板题_Edmonds_Karp

本文深入探讨了使用Edmonds-Karp算法解决最大流问题的方法,包括算法实现细节、模板代码解析及实际应用案例。通过具体实例,帮助读者理解并掌握最大流算法的核心思想和操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

赤果果的网络流...模板题...唯一要留意的是一条边可能会给出多次容量..所以每次都要加起来才是这条边的流量...用Edmonds_Karp写的:

/* POJ1273 最大流模板题. Edmonds_Karp */ #include<iostream> #include<queue> using namespace std; queue<int> Myqueue; int NumOfPoint,NumOfLine,Network[210][210],pre[210]; int GetMin(int a,int b) { if (a<b) return a; else return b; } int BFS() { bool used[210]; int i,NowPoint,Flow[210]; memset(Flow,-1,sizeof(Flow)); memset(used,0,sizeof(used)); while (!Myqueue.empty()) Myqueue.pop(); Myqueue.push(1); Flow[1]=1<<30; pre[1]=1; while (!Myqueue.empty()) { NowPoint=Myqueue.front(); Myqueue.pop(); for (i=1;i<=NumOfPoint;i++) if ( !used[i] && Network[NowPoint][i] ) // 每次广搜..每个点只use一次..! { Flow[i]=GetMin ( Flow[NowPoint] , Network[NowPoint][i] ); used[i]=true; pre[i]=NowPoint; Myqueue.push(i); } } if (Flow[NumOfPoint]==-1) return 0; return Flow[NumOfPoint]; } int Edmonds_Karp() { int i,MinFlow,ans=0; while (MinFlow=BFS()) { ans+=MinFlow; int NowPoint=NumOfPoint,PrePoint; while (NowPoint!=1) { PrePoint=pre[NowPoint]; Network[PrePoint][NowPoint]-=MinFlow; Network[NowPoint][PrePoint]+=MinFlow; NowPoint=PrePoint; } } return ans; } int main() { freopen("1458.in","r",stdin); freopen("1458.out","w",stdout); while (scanf("%d%d",&NumOfLine,&NumOfPoint)!=EOF) { int x,y,R; memset(Network,0,sizeof(Network)); for (int i=1;i<=NumOfLine;i++) { scanf("%d%d",&x,&y); scanf("%d",&R); Network[x][y]+=R; } printf("%d\n",Edmonds_Karp()); } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值