最大流问题(Ford-Fulkerson算法)

最大流量问题

对于最大流量问题的详细分析和理论参见算法导论,Ford-Fulkerson算法,伪代码如下:

SetFtotal= 0

Repeat until there is no path from s to t:

Run DFS from s to find a flow path to t

Letcp be the minimum capacity value on the path

Addcp toFtotal

For each edgeu -> v on the path:

Decrease c(u,v) bycp

Increasec(v,u) bycp

下面通过一个具体例子,说明算法的执行流程。

参考:

(1)《算法导论》P404;

时间: 2024-12-25 12:03:44

最大流问题(Ford-Fulkerson算法)的相关文章

ACM/ICPC 之 网络流入门-Ford Fulkerson(POJ1149)

按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47Ms Memory:276K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<queue> using namespace std; #def

图的匹配问题与最大流问题(六)——匈牙利算法一种简洁实现

接着这个系列,前几个又重新写匈牙利算法时,发现了一种更为简洁的实现方式,和上一篇文章相比http://blog.csdn.net/smartxxyx/article/details/9672181, 这个算法更为简洁,也好理解.和维基百科上介绍的算法思路是一致的. 求最大匹配的一种显而易见的算法是:先找出全部匹配,然后保留匹配数最多的.但是这个算法的时间复杂度为边数的指数级函数.因此,需要寻求一种更加高效的算法.下面介绍用增广路求最大匹配的方法(称作匈牙利算法,由数学家Harold Kuhn于1

Ford&amp;Fulkerson 最大流问题

#include<iostream> using namespace std; #define MAXN 10000003 int n,sink; bool Vis[100]; __int64 C[100][100],F[100][100]; struct list { int value; bool dir; }; struct stack { int top; list node[100]; }f; bool DFS(int x) { if(x==sink) { f.top=0; retu

18.boost Ford最短路径算法(效率低)

到某个节点最近距离                  最短路径当前节点的父节点 完整代码 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <vector> 5 #include <deque> 6 #include <boost/graph/adjacency_list.hpp> 7 //A*寻路算法 8 #include <bo

Bellman ford 最短路径算法

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" /> 下表记录S到每一个节点的距离: 第一次迭代, S->A = 4 ,由于S->A眼下为INF.因此更新MIN(S->A)为4 S->B = 6.由于S->B眼下为INF.因此更新MIN(S->B)为6 S->C

C++ 基于Dijkstra算法和基于BFS算法的Ford Fulkson算法比较

#include<iostream> #include<cstdlib> #include<cstdio> #include<ctime> #include<cstring> #include<vector> #include<queue> #include<array> #include<windows.h> using namespace std; const int INF = INT_MAX

编程算法

前十个是来自圣经的十大算法: 发起人的描述:<来自圣经的证明>收集了数十个简洁而优雅的数学证明,迅速赢得了大批数学爱好者的追捧.如果还有一本<来自圣经的算法>,哪些算法会列入其中呢? 第一名:Union-find 严格地说,并查集是一种数据结构,它专门用来处理集合的合并操作和查询操作.并查集巧妙地借用了树结构,使得编程复杂度降低到了令人难以置信的地步:用上 一些递归技巧后,各种操作几乎都能用两行代码搞定.而路径压缩的好主意,更是整个数据结构的画龙点睛之笔.并查集的效率极高,单次操作

mathematical method

mathematical method 曲线拟合 指数 \(lnY = lna + bX\) 对数 \(Y = blnX + a\) 幂函数 \(lgY=lga+blgX\) 多元线性回归模型 回归分析中有两个或者两个以上的自变量,就是多元回归 最小化残差平方和 SSE 图论: Floyd #include <iostream> using namespace std; const int maxn = 200; int n,s,t; int a[maxn+1][maxn+1]; void i

最大流问题

真的,资料好多的,转载两个差不多了,但其实,我是读运筹学教程+算法竞赛入门经典训练指南读懂的. 比较全面的是輝夜の永遠亭写的,基本上的流程都介绍了,特别是比较写得很好. 当然博客园上也有人转载http://www.cnblogs.com/longdouhzt/archive/2012/05/20/2510753.html 主要涉及以下: 1. Ford - Fulkerson 方法 2. Edmonds - Karp 算法 3. Dinic 算法 4. Improved SAP 算法 ... 7

微软等数据结构+算法面试100题全部答案集锦

1.把二元查找树转变成排序的双向链表. 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10  / \  6 14  / \ / \  4 8 12 16 转换成双向链表 4=6=8=10=12=14=16. 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode  {  int m_nValue; // value of node  BSTreeNode *m_pLeft; // left child