zoukankan      html  css  js  c++  java
  • 增广路径求解最大流

    关于什么是最大流。我说不清楚,而且也没有别人的比喻生动。

    【主要是我懒,不想画图】

    算法的核心在于:找到增广路径,修改它,继续找,直到没有。

    While ( findAugmentPath() ) // 判断是否有增广路
    	maxFlow = maxFlow + delta // 最大流增加
    	modifyGraph() // 对增广路进行修改
    End While

    最近智商有点不够用。想了很久才想通findAugmentPath()函数。
    利用的是BFS。
     1 int i,j,u,v;
     2     int flag=0;
     3     for(i=0;i<n;i++)
     4     {
     5         queue[i]=0;//bfs算法的队列
     6         visited[i]=0;//是否被访问
     7         path[i]=0;//保存走过的路
     8         capacity[i]=0;//最大流
     9     }//初始化
    10     int tail=0;//tail标记此时bfs到哪个地方了
    11     queue[tail]=0;
    12     capacity[0]=inf;
    13     visited[0]=1;
    14     i=0;
    15     while(i<=tail)
    16     {
    17         u=queue[i];
    18         if(u==n-1)//如果目的点入队说明存在增广路径
    19         {
    20             flag=1;
    21             return capacity[n-1];
    22             
    23         }
    24             
    25         for(v=0;v<n;v++)//bfs
    26         {
    27             if(r[u][v]>0&&r[u][v]!=inf&&visited[v]==0)
    28                 {
    29                     //cout<<v<<endl;
    30                     path[v]=u;
    31                     capacity[v]=min(r[u][v],capacity[u]);
    32                     visited[v]=true;
    33                     tail=tail+1;
    34                     queue[tail]=v;
    35                 }
    36             
    37         }
    38         i++;
    39     }
    View Code

    我在想如果只是需要找到一条增广路径,然后修改它,dfs算法也可以。【于是给自己挖了一个坑】

    对增广路径的修改,就是找到了某一个路径的最大流,然后经过的路径全部减去这个最大流,意思是下次这里不通了。

     1 void modifyGraph()
     2 {
     3     int flow=capacity[n-1];
     4     int now=n-1;
     5     while(now!=0)
     6     {
     7         int fa=path[now];
     8         r[fa][now]=r[fa][now]-flow;
     9     //    r[now][fa]=r[now][fa]+flow;
    10         now=fa;
    11             
    12     } 
    13 }
    View Code
  • 相关阅读:
    jquery使用ajax
    Docker下使用centos无法使用systemctl怎么办
    memcache安装及解决无法远程连接的问题
    NetCore控制台程序-使用HostService和HttpClient实现简单的定时爬虫
    PHP代码审计01
    路由和交换-
    路由和交换-VLAN
    路由和交换-FTP配置
    51job招聘信息爬虫
    豆瓣电影排行250爬虫
  • 原文地址:https://www.cnblogs.com/zhenzhenhuang/p/5877566.html
Copyright © 2011-2022 走看看