算法设计与分析课件 48 Dinic算法.pptxVIP

  • 3
  • 0
  • 约1.59千字
  • 约 19页
  • 2026-06-10 发布于山东
  • 举报

算法设计与分析本节要点CONTENTSDinic算法

Dinic算法Dinic算法(又称Dinitz算法)是一个在网络流中计算最大流的多项式复杂度的算法,设想由以色列(前苏联)的计算机科学家Yefim(Chaim)A.Dinitz在1970年提出。最短增广路EK算法每次BFS找到一条增广路,增流后,需要重新BFS找下一条增广路,直到找不到增广路为止。Dinic算法,首先从源点出发BFS分“层”,然后从源点出发DFS,沿着d[y]=d[x]+1的边(x,y)找增广路,一次DFS可以实现多次增广,这正是Dinic算法的巧妙之处。

Dinic算法算法步骤:1)在残余网络上BFS构造分层图;2)在层次图中DFS找增广路,进行增流,直到不存在增广路。3)重复以上步骤直到无法增广。

Dinic算法(1)在残余网络上,从源点出发进行广度优先搜索,构造分层图。

Dinic算法(2)在层次图中进行深度优先搜索,找到第1条增广路1-2-4-6。先从节点6回溯到节点4,再从节点4回溯到节点2,回溯时增流8(同向边减8,反向边加8)。

Dinic算法节点2还有一个邻接点5,从节点2出发继续进行深度优先搜索,又找到增广路2-5-6,回溯时增流2。因为1-2的可增量为10,2-4已经增流8,所以从节点2出发还可以增流2。

Dinic算法回溯到节点1,回溯时增流10(从1到2的边减10,从2到1的边加10

文档评论(0)

1亿VIP精品文档

相关文档