码迷,mamicode.com
首页 > 其他好文 > 详细

网络流

时间:2018-08-23 15:43:48      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:push   div   col   标示   cost   初始   return   出队   source   

技术分享图片
#define Max 250
#define INF 0x3f3f3f3f
int map[Max][Max];
int max_flow(int num,int map[][Max],int source,int sink)//参数含义:结点数量 网络 源点 汇点
{
    int pre[Max],min_flow[Max];//记录结点的父节点 当前路径中最小的一段的值,也即限制值
    int flow[Max][Max];//记录当前网络中的流
    int ans = 0 ;//最终结果
    memset(flow,0,sizeof(flow));
    while(1)//一直循环,直到不存在增广路径
    {
        queue<int> q;
        memset(pre,-1,sizeof(pre));
        q.push(source);
        pre[source] = -2;//源点的父节点需特殊标示
        min_flow[source] = INF;
        while(!q.empty())//BFS寻找增广路径
        {
            int temp = q.front();//出队列
            q.pop();
            for(int i = 0 ; i < num ; i++)//由结点temp往外扩展
            {
                if(pre[i] == -1 && flow[temp][i] < map[temp][i])
                        //当结点i还未被探索到,并且还有可用流量
                {
                    q.push(i);//加入队列
                    pre[i] = temp;//标示父节点
                    min_flow[i] = min(min_flow[temp],map[temp][i]-flow[temp][i]);//求得min_flow
                }
            }
            if(pre[sink]!=-1)//sink的父节点不为初始值,说明BFS已经找到了一条路径
            {
                int k = sink;
                while(pre[k] >= 0)
                {
                    flow[pre[k]][k] +=min_flow[sink];//将新的流量加入flow
                    flow[k][pre[k]] -=min_flow[sink];
                    k = pre[k];
                }
                break;
            }
        }
        if(pre[sink] != -1) 
            ans+=min_flow[sink];
        else
            return ans;//不存在增广路径,返回
    }
}
int main()
{
    int m,n;//n流通数,m为节点数量
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        int a,b,cost;
        memset(map,0,sizeof(map));
        for(int i=0;i<n;i++)
        {
            scanf("%d%d%d",&a,&b,&cost);
            map[a-1][b-1]+=cost;//网络
        }
        printf("%d\n",max_flow(m,map,0,m-1));
    }
    return 0;
}
最大流

 

网络流

标签:push   div   col   标示   cost   初始   return   出队   source   

原文地址:https://www.cnblogs.com/ww123/p/9523468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!