Edmonds-Karp算法

建立在Ford-Fulkerson 方法上的增广路算法,与一般的Ford-Fulkerson 算法不同的是,它用广度搜索实现对增广路的寻找

/************************************************************************/
/* Name: maxflow
/* Description: find the max flow of the network from s to t using
Edmonds-Karp Algorithm
/* Parameter list: s - begin point of the network
/* t - end point of the network
/***********************************************************************
*/
#define MAX_VECT 105
#define INF 105
int c[MAX_VECT][MAX_VECT];
int n;
int maxflow(int s, int t)
{
int u, v, bg, ed, minflow, flow = 0;
int queue[MAX_VECT], pre[MAX_VECT];
while (true)
{
memset(pre,
-1, sizeof(pre));
for (queue[bg=ed=0]=s; bg <= ed; bg++)
{
u
= queue[bg];
for (int i = 0; (i < n)&&(pre[t]==-1); i++)
if (c[u][i] > 0 && pre[i] == -1)
{
pre[i]
= u;
queue[
++ed] = i;
}
}
if (pre[t] == -1)break;
minflow
= INF;
for (u = pre[v=t];v!=s;v=u,u=pre[v])
if (c[u][v] < minflow) minflow = c[u][v];
for (u = pre[v=t];v!=s;v=u,u=pre[v])
c[u][v]
-= minflow, c[v][u] += minflow;
flow
+= minflow;
}
return flow;
}

 

posted on 2010-11-17 12:18  ltang  阅读(1731)  评论(0编辑  收藏  举报

导航