网络流Edmond-Karp算法

(超简单、超易懂、超详细)算法精讲(二十五):埃德蒙兹-卡普算法 埃德蒙兹-卡普算法(Edmonds-Karp algorithm)是一种用于解决最大流问题的算法。最大流问题是指在一个有向图中,寻找从源节点到汇节点的最大流量的问题。该算法是在1959年由杰克·埃德蒙兹兹和理查德·卡普提出的。它基于寻找增广路径的思想,通过不断地在残余网络中寻找增广路径,来逐步增加最大流的流量。埃德蒙兹-卡普算法的时间复杂度为O(V * E^2),其中V是节点的数量,E是边的数量。 阅读详情
前阵子都在忙PHP的事,没有时间去更新博客,今天下午终于狠下心来学网络流,在这里讲一下网络流Edmond-Karp算法的基础内容。
至于网络流的一些基础概念,这里就不说明了,大家可以去百度或看书。
其思想是不断通过BFS寻找一条增广路,直到残留网络中不再存在增广路为止。
对于每次找到一条增广路,我们需要知道两条信息。
1、该增广路的最大流量(可以定义一个变量来求得)。
2、该增广路的路径(可以定义一个数组来存每个节点的前驱)。
对于每次增广,从 x 到 y 的容量减少增广流量的同时从 y 到 x 的容量也要增加增广的流量。

找了这么一题来练手:POJ1273 代码如下:
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <vector>
#include <iomanip>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;

#define pi 3.1415926535897932385
#define LL64 __int64
#define LL long long
#define N 210
#define M 2147483647

int n, m;//m个点,n条边
int arr[N][N];//记录残留网络的容量
int pre[N];//记录前驱
int flow[N];//记录当前最大流量

int bfs(int source, int sink)
{
queue<int> q;
while (!q.empty())
{
q.pop();
}
memset(pre, -1, sizeof(pre));
pre[source] = 0;
flow[source] = M;
q.push(source);
while (!q.empty())
{
int index = q.front();
if (index == sink) break;//找到了增广路径
q.pop();
for (int i = 2; i <= m; i++)
{
if (arr[index][i] <= 0 || pre[i] != -1) continue;
pre[i] = index;//记录前驱
flow[i] = min(arr[index][i], flow[index]);//记录当前最大流量
q.push(i);
}
}
if (pre[sink] == -1) return -1;//残留图中不再存在增广路径
return flow[sink];
}

int maxflow(int source, int sink)
{
int flow_sum = 0;
int inc = 0;
while ((inc = bfs(source, sink)) != -1)
{
int s = sink;
while (s != source)
{
int p = pre[s];
arr[p][s] -= inc;
arr[s][p] += inc;
s = p;
}
flow_sum += inc;
}
return flow_sum;
}

int main()
{
//freopen("data.in", "r", stdin);
//freopen("data.out", "w", stdout);

while (~scanf("%d%d", &n, &m))
{
memset(arr, 0, sizeof(arr));
for (int i = 0; i < n; i++)
{
int x, y, z;
scanf("%d%d%d", &x, &y, &z);
if (x == y) continue;
arr[x][y] += z;
}
printf("%d\n", maxflow(1, m));
}

return 0;
}

Edmonds 算法:Edmond 算法的一种实现,用于从图中获得最大生成权重树。-matlab开发 各位, 这是从 Alan Gibbons 书算法图论中获取的 Edmond 算法的实现,以获得最大权重生成树或最大分支。 我修复了已发布算法中的一些错误,并使此实现可用。 我相信您也应该能够通过改变权重并在应用算法后将它们改回来来获得最小生成树。 立即下载

相关推荐

​​EMC设计实战:BCI(大电流注入)硬件设计规范

LIN接口:集成TVS管(如PESD5V0S1BL)与共模电感,耐压等级≥20V(8kV HBM)。输入滤波:10μF电解电容(100kHz截止)+ 0.1μF陶瓷电容(10MHz截止)。​:全频段(1MHz-400MHz)注入200mA电流,LIN通信误码率<0.01%。对敏感电路(如传感器)采用隔离电源(如ADuM5000),隔离电压≥3kVrms。​:连续波(CW)与调幅波(AM,调制深度80%)组合,覆盖全频段干扰场景。​:选择低频段(1-100MHz)感量≥100μH的绕线电感,抑制共模电流。

m0_50833886的博客 1940

最大流算法:Edmond-Karp算法——Ford-Fulkerson算法——Dinic算法

问题定义 给定有向图G=(V,E),其每条边都有容量cv,wcv,wc_{v,w}.这个容量代表这个边可以通过的最大容量。对于任一条边(v,w)(v,w)(v,w),最多有cv,wcv,wc_{v,w}个单位的流可以通过。 图中有两个特殊点,一个是s,称为源点(source),一个是t,称为收点(sink)。 既不是源点也不是收点的点,总的进入的流必须等于总的发出的流。 最大流问题就是确定...

anlian523的博客 1万+

Data+AI新玩法:Text2SQL让数据查询变得如此简单!

你是不是也遇到过这种情况?明明手头有海量数据,却因为SQL这道“门槛”,让分析和决策变得复杂和拖沓。你可能想着:“要是我能直接用自然语言和数据库对话,那该多好!你不是一个人在这样想,Text2SQL技术正是为了帮你摆脱这一困境而诞生的。

Ase5gqe的博客 867

最大流 --- Edmond Karp算法

本文转载于最大流 — Edmond Karp算法因原文部分图片及代码显示问题,阅读不方便,故转载。 Edmond Karp算法的大概思想: 反复寻找源点s到汇点t之间的增广路径,若有,找出增广路径上每一段[容量-流量]的最小值delta,若无,则结束。 在寻找增广路径时,可以用BFS来找,并且更新残留网络的值(涉及到反向边)。 而找到delta后,则使最大流值加上delta,更新为当前的最大流值。 (粗体表明需要掌握的概念) 关于反向边: 以下摘至HDOJ的课件和网上的: 首先来看一下基本的网络流最大流模型

梅子酒的博客 1542

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2553

QtNodeEditor实战:构建高效可视化编程环境的完整指南

本文是QtNodeEditor实战的完整指南,详细介绍了如何利用这一基于Qt框架的可视化编程工具构建高效节点编辑器。内容涵盖从快速集成、自定义节点模型到深入理解MVC数据流架构,并提供了样式定制、场景序列化、动态端口等高级功能的实现方法,帮助开发者快速搭建灵活、可维护的可视化编程环境。

lemon的博客 702

网络流入门——Edmond-Karp算法

原文地址 一、概念引入 首先要先清楚最大流的含义,就是说从源点到经过的所有路径的最终到达汇点的所有流量和。       流网络G=(V,E)是一个有向图,其中每条边(u,v)∈E均有一个非负容量c(u,v)>=0。如果(u,v)不属于E,则假定c(u,v)=0。流网络中有两个特别的顶点:源点s和汇点t。下图展示了一个流网络的实例(

weixin_44630656的博客 793

Java判断地图坐标(经度,纬度)是否在多边形区域或圆形区域内

​欢迎光临我的博客查看最新文章:在地图上,可以使用经纬度确定一个位置,如上海体育场(121.449391,31.188228),如果知道了2个地点的经纬度,我们就能在地图上找到其位置及2点的距离,百度地图或高德地图提供了相应的服务;如果将多个坐标点连成多边形区域,如何判断某个坐标点是否在多边形区域内,如下工具类。

river106的博客 3945

图论(八)——网络流的最大流问题之Edmonds-Karp算法

增广路 为了解决最大流问题,再引入一个概念:剩余容量【c(x , y)-f(x , y)】 如果可以找到一条从源点出发,经过中间节点,流向汇点,且其中每一条边的剩余容量均大于0的路,就称这条路为一条增广路,假设可以知道这一条增广路中所有的边的最小剩余容量为p,那么对于整个网络系统而言,就可以增加一个流量为w的流从源点通过这一条路流向汇点,那么这个网络的流量就增加了w。 如果找到了所有的增广路,已...

i_want_to_studyi的博客 2379

Modelsim10.5_se安装(Win11)

modelsim是Mentor公司开发的优秀的HDL语言仿真软件。它能提供友好的仿真环境,采用单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术和单一内核仿真技术,编译仿真速度快且编译的代码与平台无关。

m0_51186267的博客 9924

在 SAP Fiori 中正确配置 Group 角色:从 PFCG 分配到首页呈现的完整链路

摘要:SAP Fiori项目中,用户登录后能否看到应用往往取决于角色配置而非前端开发。关键在于通过PFCG角色将launchpad designer中创建的tile group关联到用户角色。Catalog是应用池,group是用户首页可见的工作区。正确配置后,用户会看到角色对应的默认分组,同时保留个性化调整能力。项目实施中常见问题是应用开发完成但未正确配置group与角色关联,导致业务用户无法在首页看到应用入口。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 167

网络流_Edmond-Karp算法、Dinic算法

转载:网络流基础篇——Edmond-Karp算法 BY纳米黑客 网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点。 汇点:另一个点也很特殊,只进不出,叫做汇点。 容量和流量:每条有向边上有两个量,容量和流量,从i到j的容量通常用c[i,j]表示,流量则通常是f[i,j]. 通常可以把这些边想象成道路,流量就...

176

一种独特机理驱动的化学反应分类器详解

代码位置第 47-300+ 行// atom_494: 硫原子,度数=2,化合价=2,无H,无电荷!// atom_35: 氧原子,度数=1,1个H,无电荷// atom_347: 氧原子,度数=2,无H,无电荷!→atom_494()[OD1h1+0]→atom_35()→atom_347()特性传统方法(MCS)NameRXN(机理驱动)匹配策略最大公共子结构原子类型模式 + 操作码时间复杂度O(n) - 线性扫描机理理解无内置化学机理原子映射需额外计算自动推导准确性结构相似。

ASKCOS博客 159

网络流—最大流(Edmond-Karp算法)

网络流看了两天,终于有了一点眉目,也拿模版A了道题目,通过对于模版代码的调试也真正了解了ek算法的用途了。 想好好写下总结都不让人顺心,写到一半网站死了,又得重新写。。 不说废话了,直接正题 首先要先清楚最大流的含义,就是说从源点到经过的所有路径的最终到达汇点的所有流量和 EK算法的核心 反复寻找源点s到汇点t之间的增广路径,若有,找出增广路径上每一段[容量-流量]的最...

aysd68784的博客 1106

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Algorithms】网络流基础篇——Edmond-Karp算法

网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点。 汇点:另一个点也很特殊,只进不出,叫做汇点。 容量和流量:每条有向边上有两个量,容量和流量,从i到j的容量通常用c[i,j]表示,流量则通常是f[i,j]. 通常可以把这些边想象成道路,流量就是这条道路的车流量,容量就是道路可承受的最大的车流量。很显然的,流量&lt;=容量。而对于每个不是源点和汇点的点来...

Ginsn的博客 660

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

网络流基础篇——Edmond-Karp算法

BY纳米黑客  这是我的一个初学者教程系列的一部分,也是这个系列的第一篇文章,这个系列计划中将包括网络流,线段树,树状数组等一些初学者比较难以入门的内容。  因为是初学教程,所以我会尽量避免繁杂的数学公式和证明。也尽量给出了较为完整的代码。  本文的目标群体是网络流的初学者,尤其是看了各种NB的教程也没看懂怎么求最大流的小盆友们。本文的目的是,解释基本的网络流模型,最基础的最大流求法,即bf

ccsu_cherish 1484

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

网络流基础之Edmond-Karp算法

网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点。 汇点:另一个点也很特殊,只进不出,叫做汇点。 容量和流量:每条有向边上有两个量,容量和流量,从i到j的容量通常用c[i,j]表示,流量则通常是f[i,j]. 通常可以把这些边想象成道路,流量就是这条道路的车流量,容量就是道路可承受的最大的车流量。很显然的,流量&lt;=容量。而对于每个不是源点和汇点的点...

xizi_ghq的博客 213

最大网络流Edmond-Karp算法

#include using namespace std; const int MAXV=2000; //最大顶点数量 const int MAXE=2000; //最大边数量 const int INFINITY = 0x7fffffff; //无穷大 int capacity[MAXV][MAXV]; //记录残流网络的容量 int flow[MAXV]; //标记从源点

QiaoRuoZhuo的专栏 593

网络流--最大流——Edmond-Karp算法&&Dinic算法

转载自:https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html 网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点。 汇点:另一个点也很特殊,只进不出,叫做汇点。 容量和流量:每条有向边上有两个量,容量和流量,从i到j的容量通常用c[i,j]表示,流量则通常是f[i,j]. 通常可以把这些边想象成道路...

1900的博客 529

hdu1532:网络流Edmond-karp算法+Dinic算法

Problem Description Every time it rains on Farmer John’s fields, a pond forms over Bessie’s favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time

Davenny:~我今天该吃点什么捏~ 329
上一篇: 福利来了:几何——二维凸包
下一篇: 求解网络流涉及的几个主要概念
ColorWaterer
博客等级 码龄12年 16粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值