您的位置:首页 > 大数据 > 人工智能

POJ 1273 Drainage Ditches

2011-10-21 22:00 204 查看
额,又做了一遍哈,不过有一段时间没学最大流了,就当是复习复习挺好!

View Code

#include <stdio.h>
#include <string.h>

#define N 202

int map

;
int queue
;
int pre
;

int Edmonds_Karp(int start,int end,int n)
{
int i,cur,front,rear;
int maxflow=0;
while(true)
{
front=rear=0;    queue[rear]=start;
memset(pre,-1,sizeof(pre)); pre[start]=0;
while(front<=rear)
{
cur=queue[front++];
for(i=1;i<=n;i++)
{
if(map[cur][i] && pre[i]==-1)
queue[++rear]=i,pre[i]=cur;
}
if(pre[end]!=-1)    break;
}

if(pre[end]==-1)    break;

int minflow=0x7fffffff;
for(cur=end;cur!=start;cur=pre[cur])
{
if(minflow>map[pre[cur]][cur])
minflow=map[pre[cur]][cur];
}
maxflow+=minflow;
for(cur=end;cur!=start;cur=pre[cur])
{
map[pre[cur]][cur]-=minflow;
map[cur][pre[cur]]+=minflow;
}
}

return maxflow;
}

int main()
{
int n,m;
int i,v,u,flow;
//freopen("input.txt","r",stdin);
while(scanf("%d %d",&n,&m)!=EOF)
{
memset(map,0,sizeof(map));
for(i=0;i<n;i++)
{
scanf("%d %d %d",&v,&u,&flow);
map[v][u]=flow;
}

printf("%d\n",Edmonds_Karp(1,m,m));
}
return 0;
}


这个Edmonds_Karp看这就是舒服呵,不想Dinic那么复杂!

就是不断找增广路。。。直到没有增广路。。。结束!

需要注意的是,这里的亮点是:pre
这个数组,记录路线的数组,挺不错的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: