下面是EK的bfs算法找最大流的代碼:
//Edmonds-Karp,bfs找增廣路
int E_K(int s,int t)
{
queue<int>q;
int i;
int ans=0;
while(!q.empty()) q.pop(); //初始化隊列
while(1)
{
memset(a,0,sizeof(a));
a[s]=INF; //初始源點的出發流為無窮
q.push(s);
while(!q.empty())
{
int u=q.front(); q.pop();
for(i=0;i<=t;i++)
{
if(!a[i] && cap[u][i]-flow[u][i]>0)
{
p[i]=u;
q.push(i);
a[i]=cap[u][i]-flow[u][i];
if(a[u]<a[i]) a[i]=a[u];
}
}
}
if(a[t]==0) break; //無法找到到匯點的流,無增廣路,跳出循環
for(i=t;i!=s;i=p[i])
{
flow[p[i]][i]+=a[t];
flow[i][p[i]]-=a[t]; //更新逆向流
}
ans+=a[t]; //增加最大流
}
return ans;
}