网络寻找最大流(Edmonds-Karp算法)

文章目录

  • 概述
    • Ford_Fulkerson思想
    • 残量图Residual Graph
  • Edmonds-Karp算法

概述

本文将介绍网络流模型中寻找最大流的算法–Edmonds-Karp(简称EK)算法,即BFS寻找增广路径
该算法是基于Ford_Fulkerson思想,并且算法的实现逻辑依赖于残量图的权值,故下文将介绍Ford_Fulkerson思想和残量图

Ford_Fulkerson思想

在残量图中不断查找增广路径,直到增广路径为止

残量图Residual Graph

对于顶点v和顶点w

  • 原图中v-w的容量为k,流量为m
  • 残量图中的v-w的权值为k-m,w-v的权值为m
    如下图所示
  • 原图中,0-1的容量为4,流量为0
  • 残量图中,0-1的权值为4,1-0的权值为0
    网络寻找最大流(Edmonds-Karp算法)_第1张图片

Edmonds-Karp算法

即BFS寻找增广路径算法(如不熟悉BFS遍历,请翻阅本人的另一篇文章:图的遍历(动图))

以下,将会展示一个示例,来描述整个算法的过程
网络寻找最大流(Edmonds-Karp算法)_第2张图片

  • 从顶点0出发,bfs遍历到顶点1和顶点2,流量分别为:
    • 0-1的最大流量为4
    • 0-2的最大流量为2
      网络寻找最大流(Edmonds-Karp算法)_第3张图片
  • 从顶点1出发,执行BFS遍历,先遍历到顶点1和顶点2,此时1-3的权值不为0,所以可以走到顶点3,虽然从1可以到达2,但是2已经遍历过了,所以不执行,遍历完成,得到如图中的红色路径
  • 此时0-1的最大流量为4,1-3的最大流量为2,即找到一条从顶点0到顶点3的路径,最大流量为min(0-1的最大流量, 1-3的最大流量)=1-3的最大流量=2,更新0-1,1-3的残量图
    网络寻找最大流(Edmonds-Karp算法)_第4张图片
  • 从顶点0出发,执行BFS遍历,先遍历到顶点1和顶点2,由于此时1-3的权值已经为0,所以从1到不了3,虽然从1可以到达2,但是2已经遍历过了,所以不执行,从回到顶点2,此时2-3的权值不为0,所以可以从顶点2走到顶点3,遍历完成,得到如图中的红色路径
  • 此时0-2的最大流量为2,2-3的最大流量为4,即找到一条从顶点0到顶点3的路径,最大流量为min(0-2的最大流量, 2-3的最大流量)=0-2的最大流量=2,更新0-2,2-3的残量图
    网络寻找最大流(Edmonds-Karp算法)_第5张图片
  • 从顶点0出发,执行BFS遍历,先遍历到顶点1,由于0-2的权值为0,所以没有遍历到2,由于此时1-3的权值已经为0,所以从1到不了3,但是1-2的权值不为0,所以顶点1可以到达顶点2,而2-3的权值不为0,所以顶点2可以到达顶点3,遍历完成,得到如图中的红色路径
  • 此时0-1的最大流量为2,1-2的最大流量为6,2-3的最大流量为2,即找到一条从顶点0到顶点3的路径,最大流量为min(0-1的最大流量, 1-2的最大流量,2-3的最大流量)=0-1的最大流量或2-3的最大流量=2,更新0-1,1-2,2-3的残量图
    网络寻找最大流(Edmonds-Karp算法)_第6张图片
  • 从顶点0出发,执行BFS遍历,遍历到达顶点1和顶点2就结束了,再也找不到新的增广路径,由此,查找完成

你可能感兴趣的:(图论,EK算法,最大流,网络流)