网络流Ford-fulkerson算法及dinic算法

本文探讨了网络流问题中的Ford-Fulkerson算法和Dinic算法。Ford-Fulkerson算法通过DFS寻找增广路径,但效率较低。Dinic算法通过BFS分层并优化寻找增广路径的过程,具有更好的时间复杂度,为nm^2。这两种算法都是解决网络最大流问题的有效方法。
摘要由CSDN通过智能技术生成

当一个图中的每条边都拥有流量和最大流量时,我们一般就会求整个图的最大流量,这种问题就是网络流的最大流问题。

一开始我们考虑使用贪心,遍历一条路,找到整条路上的最大流量的最小值,储存,然后更新各点,当某边流量值等于最大流量值时,删除该边,再次遍历知道没有从源点到汇点的路径。

但经过简单的验证我们发现,以上的贪心算法算出的结果不一定是最优解。

原因是什么?

原因就是贪心过早地“填满了一条边”,从而“封锁了流量继续增加的可能”。

所以我们思考,能否将“不合理”的边删掉,从而继续搜索路径。但实际上,直接进行删除操作太过复杂,所以我们可以将原边的逆向边加在图中,这样就可以巧妙地删除不合理的边,从而求到最优解。

int dfs(int to,int t,int f)

{

if(to==t)return f;

vis[to]=1;

for(int i=first[to];i!=0;i=next[i]){

int v=go[i];

if(vis[v]==0&&data[i]>0){

int d=dfs(v,t,min(f,data[i]));

if(d>0){

data[i]-=d;

data[i^1]+=d;

return d;

}

}

}

return 0;

}

该方法使用的是纯DFS<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值