33,008
社区成员
发帖
与我相关
我的任务
分享
void findpath()
{
visit[s]=1;reached=0;
for (v ∈ V-{s})
visit[v]=0;
for (v ∈ V)
d[v]=INFINITY;
create(&q);insert(&q,s);
do {
v=top(&q);delete(&q);
for (w ∈ adjlist[v]){
if (!visit[w] && f[v][w]<c[v][w]){
visit[w]=1;
insert(&q,w);
p[w]=v;
d[w]=min(d[v],c[v][w]-f[v][w]);
if (w==t)
reached=1;
}
}
} while (!empty(&q) && !reached);
}
void augment()
{
v=t;
if (reached)
do {
f[p[v]][v]+=d[t];
f[v][p[v]]-=d[t];
v=p[v];
} while (v!=s);
}
main()
{
do {
findpath();
augment();
} while (!empty(&q));
}