最大流

来源:互联网 发布:linux中touch创建用法 编辑:程序博客网 时间:2024/04/27 20:06
#include<iostream>#include<queue>#include<climits>using namespace std;#define SIZE 200int pre[SIZE];bool visit[SIZE];int flow[SIZE];int capacity[SIZE][SIZE];queue<int>Q;int min(int a,int b){return a<b ? a:b;}int bfs(int s,int t){memset(visit,0,sizeof(visit));memset(flow,0,sizeof(flow));memset(pre,0,sizeof(pre));visit[s]=true;flow[s]=INT_MAX;Q.push(s);while(!Q.empty())    {int tmp=Q.front();Q.pop();if(tmp==t)break;for(int i=s;i<=t;++i){if(!visit[i] && capacity[tmp][i]>0){pre[i]=tmp;visit[i]=true;flow[i]=min(capacity[tmp][i],flow[tmp]);Q.push(i);}}}if(flow[t]==0)return false;else return flow[t];}int Maxflow(int s,int t){int increase=0;int sum=0;while(increase=bfs(s,t)!=0){int k=t;while(k!=s){int last=pre[k];capacity[last][k]-=flow[t];capacity[k][last]+=flow[t];k=last;}sum+=flow[t];}return sum;}int main(){memset(capacity,0,sizeof(capacity));capacity[0][1]=16;capacity[0][2]=13;capacity[1][0]=-16;capacity[1][2]=10;capacity[1][3]=12;capacity[2][1]=4;capacity[2][3]=-9;        capacity[2][4]=14;capacity[3][1]=-12;capacity[3][2]=9;capacity[3][4]=-7;capacity[3][5]=20;capacity[4][2]=-14;capacity[4][3]=7;capacity[4][5]=4;capacity[5][3]=-20;capacity[5][4]=-4;bfs(0,5);cout<<Maxflow(0,5);return 0;

0 0
原创粉丝点击