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

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

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

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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-25
  • 2021-06-18
  • 2021-07-03
  • 2022-12-23
  • 2022-12-23
  • 2021-10-30
猜你喜欢
  • 2021-06-23
  • 2021-06-08
  • 2021-08-21
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案