图论 最大流FF (Ford-Fulkerson)

本文详细介绍了图论中的Ford-Fulkerson算法,这是一种用于寻找网络中从源点到汇点的最大流量的方法。通过增广路径不断更新流,直到无法找到增广路径为止,从而达到最大流状态。该算法在解决网络调度、资源分配等问题中有广泛应用。
摘要由CSDN通过智能技术生成

#include <bits/stdc++.h>
using namespace std;
typedef int weight_t;

const int SIZE_E = //500;
const int SIZE_V = //205;
int Start,End;
struct edge_t{
    int node;
    weight_t c;
    edge_t *next;
    edge_t *redge;
}Edge[SIZE_E];

int Ecnt = 0;

edge_t *Ver[SIZE_V] ;

void init(){
    Ecnt = 0;
    memset(Ver,0,sizeof(Ver));
}

void mkEdge(int a,int b,weight_t c){
    int t1 = Ecnt++;
    int t2 = Ecnt++;

    Edge[t1].node = b;
    Edge[t1].c = c;
    Edge[t1].next = Ver[a];
    Edge[t1].redge = Edge + t2;
    Ver[a] = Edge + t1;

    Edge[t2].node = a;
    Edge[t2].c = 0;
    Edge[t2].next = Ver[b];
    Edge[t2].redge = Edge + t1;
    Ver[b] = Edge + t2;
}

bool flag[SIZE_V];
//
int DFS(int u,int f){
    if ( u == End) return f;

    flag[u] = true;

    for (edge_t *p = Ver[u]; p ; p = p->next){

        int v = p->node;
        if ( flag[v] ) continue;
        weight_t c = p->c;

        if (c > 0){

            int t = DFS(v,min(c,f));
            if (t == 0)continue;

            p->c -= t;
            p->redge->c += t;
            return t;
        }
    }
    return 0;
}
int solve(){
    int ret = 0;

    while( 1 ){

        memset(flag,false,sizeof(flag));
        int t = DFS(Start,INT_MAX);
        if ( 0 == t )return ret;
        ret += t;

    }
}

--


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值