基础的最大流算法,每次Bfs寻找最短路进行增广,这时候的增广和匈牙利算法的增广不同,找出一条残余路径就可以了。

然后对残余网络进行增广,不要忘记正向增广,相当于负向减少,也要在图中保存记录。

最后求一个割集来得到最大流。

最大流模型:

点:对点来说要求是进多少出多少

边:对边要求是不能超过最大容量,所以c的值为所有的残余边中的最小值

效率

O(VE2),效率可以满足一般题目要求。

模板如下;图保存为邻接阵

[cpp] view plaincopy
  1. typedef int Graph[200][200];
  2. typedef int Path[200];
  3. Graph map,flow;
  4. int n,s,t;
  5. int EK()
  6. {
  7. int i, j, k=0, c, head, tail; Graph R;
  8. Path prev, visit, Q;
  9. for (i = 0; i < n; i++)
  10. {
  11. for (j = 0; j < n; j++)
  12. {
  13. flow[i][j] = 0;
  14. R[i][j] = map[i][j];
  15. }
  16. }
  17. while (true) {
  18. head = tail = 0;
  19. memset(visit, false, sizeof(visit));
  20. Q[tail++] = s;
  21. prev[s] = -1;
  22. visit[s] = 1;
  23. while (head < tail) {
  24. k = Q[head++];
  25. for (i = 0; i < n; i++)
  26. {
  27. if (!visit[i] & R[k][i] > 0)
  28. {
  29. visit[i] = 1;
  30. prev[i] = k;
  31. if (i == t) break;
  32. if(tail>=0) Q[tail++] = i;
  33. }
  34. }
  35. if(i==t) break;
  36. }
  37. if (!visit[t]) break;
  38. c = 1000000;
  39. j = t;
  40. while (j != s) {
  41. i = prev[j];
  42. if(c>R[i][j]) c=R[i][j];
  43. j = i;
  44. }
  45. j = t;
  46. while (j != s) {
  47. i = prev[j];
  48. flow[i][j] = flow[i][j] + c;
  49. flow[j][i] = -flow[i][j];
  50. R[i][j] = map[i][j] - flow[i][j];
  51. R[j][i] = map[j][i] - flow[j][i];
  52. j = i;
  53. }
  54. }
  55. c = 0;
  56. for (i = 0; i < n; i++) {
  57. c += flow[s][i];
  58. }
  59. return c;
  60. }

Edmonds-Karp算法相关推荐

  1. C++Rabin Karp算法字符串快速查找(附完整源码)

    C++Rabin Karp算法字符串快速查找 C++Rabin Karp算法字符串快速查找完整源码(定义,实现,main函数测试) C++Rabin Karp算法字符串快速查找完整源码(定义,实现,m ...

  2. Rabin Karp 算法详解及Python实现

    目录 一.Rabin Karp 核心思路 二.字符串如何做哈希映射 三.借助前缀和列表计算滑动窗口 四.leetcode28. 代码实现 Rabin Karp 算法是用于实现字符串的模式匹配,先看le ...

  3. leetcode 1044. Longest Duplicate Substring | 1044. 最长重复子串(Rabin Karp算法)

    题目 https://leetcode.com/problems/longest-duplicate-substring/ 题解 这题暴力超时,看了 Related Topics,以及 Hint,主要 ...

  4. 算法艺术——网络最大流

    女强人:http://blog.csdn.net/abcjennifer/article/details/5556455 USACO 4.2.1 Ditch 网络最大流问题算法小结 通过 USACO ...

  5. ICPC-图论知识与算法要览

    1.图定义(Definitions in graph theory) 1)图(Graph) 2)有向图(Directed graph) 3)图数据表示 邻接矩阵(Adjacency Matrix),邻 ...

  6. 10种算法一文打尽!基本图表算法的视觉化阐释

    图源:unsplash 来源:读芯术 在社交媒体网络.网页和链接.GPS中位置和路线等真实场景中,图表已成为一种强大的建模和捕获数据手段,如果一组对象相互关联,则可以用图表来表示. 本文就将简要解释1 ...

  7. 算法导论 CLRS 第26章 最大流 Maximum flow C#

    2021/11/26 第六部分 图算法 第22章 基本的图算法 图数据结构设计 出度.入度和度 有向图 出度≠入度 先初始化出度,再初始化入度,u.入度=u.AdjList.length-u.out_ ...

  8. 增广路算法 (最大流问题)

    Edmonds-Karp算法: 计算机科学中, Edmonds–Karp算法通过实现Ford–Fulkerson算法来计算网络中的最大流,其时间复杂度为O(V E2). 该算法由Yefim (Chai ...

  9. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  10. Python小白的数学建模课-19.网络流优化问题

    流在生活中十分常见,例如交通系统中的人流.车流.物流,供水管网中的水流,金融系统中的现金流,网络中的信息流.网络流优化问题是基本的网络优化问题,应用非常广泛. 网络流优化问题最重要的指标是边的成本和容 ...

最新文章

  1. JS 截取字符串及字符与数字转换
  2. DBoW2 cmake代码注释
  3. ASP.NET高质量生成缩略图
  4. 辽宁交通职业技术学校计算机好不好,辽宁省交通高等专科学校信息工程系
  5. 回归指令_用一条指令在新款 Mac 上找回经典的开机启动声
  6. 用HTML+CSS画出一个同心圆
  7. mysql5.7 至少需要1560,mysq5.7.28配置innodb_page_size错误引起的错误1071(42000)
  8. L1-030 一帮一 (15 分)
  9. CSS 控件适配器的菜单样式解释
  10. 使用 Eclipse 平台进行调试
  11. python 写入excel 效率_python各种excel写入方式的速度对比
  12. Apache 安装与配置
  13. Java基础03:数据类型讲解
  14. 从最近一次的计算机攻击中,我们学到的经验教训
  15. excel服务器文件只读,excel只读服务器
  16. 安卓模拟器的使用--皇室战争免费快速成长之路
  17. linux脚本出错仍执行后续脚本,crontab执行脚本出错
  18. Python调用Unit闲聊对话API的应用
  19. 程序员小灰2017-2019年原创汇总
  20. 云南省自然保护区分布及功能区划

热门文章

  1. 使用Idea搭建Spring Boot环境
  2. 洛谷 P2473 [SCOI2008]奖励关 解题报告
  3. 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0...
  4. java之StringBuffer
  5. JavaScript学习笔记(八)
  6. 2018.09.23 bzoj1076: [SCOI2008]奖励关(期望+状压dp)
  7. 5分钟正则表达式,了解一下!
  8. rutime 理解
  9. angularjs指令参数transclude
  10. EF CodeFirst类生成器