Ford-Fulkerson(最大流)

来源:互联网 发布:零售门店顾客数据分析 编辑:程序博客网 时间:2024/03/29 18:50
#include <iostream>#include <vector>#include <algorithm>#include <cstring>using namespace std;#define MAX_V 1005#define INF 99999999struct edge{    edge(int t = 0,int c = 0, int r = 0):to(t),cap(c),rev(r){}    //终点 容量 反向边    int to, cap, rev;};vector<edge> G[MAX_V];//图的邻接表bool used[MAX_V];//访问标记//增加一条从s到t容量为cap的边void addEdge(int from, int to, int cap){    G[from].push_back(edge(to, cap, G[to].size()));    G[to].push_back(edge(from, 0, G[from].size()-1));}//dfs寻找增广路int dfs(int v, int t, int f){    if(v == t) return f;    used[v] = true;    for(int i = 0; i < G[v].size(); ++i)    {        edge& e = G[v][i];        if(!used[e.to] && e.cap > 0)        {            int d = dfs(e.to, t, min(f, e.cap));            if(d > 0)            {                e.cap -= d;                G[e.to][e.rev].cap += d;                return d;            }        }    }    return 0;}//求解从s到t的最大流int maxFlow(int s, int t){    int flow = 0;    for(;;)    {        memset(used, 0, sizeof(used));        int f = dfs(s, t, INF);        if(f == 0) return flow;        flow += f;    }}

0 0
原创粉丝点击