设为首页 收藏本站
查看: 1059|回复: 0

[经验分享] SAP(最短增广路算法) 最大流模板

[复制链接]

尚未签到

发表于 2015-9-17 12:48:27 | 显示全部楼层 |阅读模式
  #include <iostream>
#include <queue>
#define msize 1024      //最大顶点数目
using namespace std;

int d[msize];           //标号
int r[msize][msize];    //残留网络,初始为原图
int num[msize];         //num表示标号为i的顶点数有多少
int pre[msize];
int n,m,s,t;            //m个顶点,n条边,从源点s到汇点t

void ini_d() //BFS计算标号,汇点t标号为0
{
    int k;
    queue<int>Q;

    memset(d,1,sizeof(d));
    memset(num,0,sizeof(num));

    Q.push(t);
    d[t]=0;
    num[0]=1;
    while (!Q.empty())
    {
        k=Q.front(),Q.pop();
        for (int i=0;i<m;i++)
        {
            if (d>=m&&r[k]>0)
            {
                d=d[k]+1;
                Q.push(i);
                num[d]++;
            }
        }
    }
}

int findAlowArc(int i)       //从i出发寻找允许弧
{
    int j;
    for (j=0;j<m;j++) if (r[j]>0&&d==d[j]+1) return j;

    return -1;
}

int reLable(int i)         //重新标号
{
    int mm=INT_MAX;
    for (int j=0;j<m;j++)
        if (r[j]>0) mm=min(mm,d[j]+1);

    return mm==INT_MAX?m:mm;
}

int maxFlow(int s,int t)      //从源点s出发的最大流
{
    int flow=0,i=s,j;
    int delta;              //增量

    memset(pre,-1,sizeof(pre));
    while (d<m)
    {
        j=findAlowArc(i);
        if (j>=0)
        {
            pre[j]=i;
            i=j;
            if (i==t)           //更新残留网络
            {
                delta=INT_MAX;
                for (i=t;i!=s;i=pre) delta=min(delta,r[pre]);
                for (i=t;i!=s;i=pre) r[pre] -= delta, r[pre] += delta;
                flow += delta;
            }
        }
        else
        {
            int x=reLable(i);       //重新标号
            num[x]++;
            num[d]–;
            if (num[d]==0) return flow;      //间隙优化
            d=x;
            if (i!=s) i=pre;
        }
    }

    return flow;
  }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-114966-1-1.html 上篇帖子: 【转】SAP反记账功能祥解 下篇帖子: SAP 快捷键
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表