#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=1000,inf=1000010;//顶点个数最大值
struct ArcType//弧结构
{int c,f;
};
ArcType edge[maxn][maxn];//邻接矩阵
int n;//顶点个数
int flag[maxn];//顶点状态 -1未标号 0已标号未检查 1标号已检查
int pre[maxn];//标号的第一个分量 指明标号从哪个顶点得到 以便找出可改进量
int alpha[maxn];//标号的第二个分量 可改进两a
int queue[maxn];//相当于bfs算法的队列
int v;//从队列里取出来的队列头元素
int qs,qe;//队列头位置 队列尾位置
int i,j;//循环变量
void ford()
{while(1)//标号直至不存在可改进路 {memset(flag,-1,sizeof flag);//标号前对顶点状态数组初始化memset(pre,-1,sizeof pre);memset(alpha,-1,sizeof alpha);flag[0]=0,pre[0]=0,alpha[0]=inf;//原点为已标号为检查顶点qs=qe=0;queue[qe]=0,qe++;//源点入队列//队列非空 且汇点为标号 while(qs<qe&&flag[n-1]==-1){v=queue[qs];qs++;//取出对头for(i=0;i<n;++i)//检查顶点v的正向和反向邻接顶点 {if(flag[i]==-1){if(edge[v][i].c<inf&&edge[v][i].f<edge[v][i].c)//正向未满{flag[i]=0,pre[i]=v;//给顶点i标号alpha[i]=min(alpha[v],edge[v][i].c-edge[v][i].f);queue[qe]=i;qe++;//顶点i入队列 } else if(edge[i][v].c<inf&&edge[i][v].f>0)//反向且有流量{flag[i]=0,pre[i]=-v;//给顶点i标号alpha[i]=min(alpha[v],edge[i][v].f);queue[qe]=i,qe++;//顶点i入队列 } //flag[v]=1;}} flag[v]=1;} //当汇点没有获得标号或汇点的调整量为0 退出循环 if(flag[n-1]==-1||alpha[n-1]==0)break;//当汇点没有标号时 应该进行调整int k1=n-1,k2=abs(pre[k1]);int a=alpha[n-1];//可改进量while(1){if(edge[k2][k1].f<inf)//正向edge[k2][k1].f=edge[k2][k1].f+a;elseedge[k1][k2].f=edge[k1][k2].f-a;//反向if(k2==0)break;//调整一直到源点k1=k2,k2=abs(pre[k2]); } }int maxflow=0;for(i=0;i<n;++i){for(j=0;j<n;j++){if(i==0&&edge[i][j].f<inf)maxflow+=edge[i][j].f;if(edge[i][j].f<inf)printf("%d->%d: %d\n",i,j,edge[i][j]);}}printf("maxflow: %d\n",maxflow);
}
int main()
{int u,v,c,f;//弧的起点 终点 容量 流量scanf("%d",&n);for(i=0;i<n;++i){for(int j=0;j<n;++j)edge[i][j].c=edge[i][j].f=inf;} while(1){scanf("%d%d%d%d",&u,&v,&c,&f);if(u==-1&&v==-1&&c==-1&&f==-1)break;edge[u][v].c=c,edge[u][v].f=f;//构造邻接矩阵 }ford();//标号法求网路最大流 return 0;/*60 1 8 20 2 4 31 3 2 21 4 2 22 1 4 22 3 1 12 4 4 03 4 6 03 5 9 34 5 7 2-1 -1 -1 -1*/
}

最大流(标号法 Ford-Fulkerson算法)相关推荐

  1. POJ-1149-PIGS(最大流 标号法)

    PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20033 Accepted: 9179 Description Mir ...

  2. dijkstra标号法表格_Dijkstra算法详细讲解

    最短路径之 Dijkstra 算法详细讲解 1 最短路径算法 在日常生活中,我们如果需要常常往返 A 地区和 B 地区之间,我们最希望 知道的可能是从 A 地区到 B 地区间的众多路径中,那一条路径的 ...

  3. dijkstra标号法表格_dijkstra算法模板及其用法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  4. 最大流的Ford-Fulkerson 标号法

    最大流标号法: https://wenku.baidu.com/view/5977dc6fa45177232f60a266.html 最大流的标号法总的来说就是不断地在图中找增广路径.增广路径就是一条 ...

  5. 标号法(label-setting algorithm)求解带时间窗的最短路问题(ESPPRC)

    以下文章来源于数据魔术师 ,作者邓发珩.周航 前言 哈罗大家好~! 想必大家在刚开始学习运筹学模型时,会觉得有些茫然不知所措吧?比如一大堆神奇的名词,各种各样的约束...反正我一开始是很懵的状态. 那 ...

  6. 网络最大流中一般增广路算法(标号法)

    网络最大流主要有两大类求解方法:增广路算法和预流推进算法 一般增广路算法:主要分为初始流为零流和初始流为非零流的情况!后者在标号的时候注意一条边是正向连接还是反向连接:若是反向的连接,那么在调整的时候 ...

  7. 网络最大流模板(标号法)

    测试数据 6 10 0 1 8 2 0 2 4 3 1 3 2 2 1 4 2 2 2 1 4 2 2 3 1 1 2 4 4 0 3 4 6 0 3 5 9 3 4 5 7 2 0->1:4 ...

  8. Ford-Fulkerson 标号法求网络最大流

    使用Ford-Fulkerson 标号法求网络最大流. ①c.f初始化为INF表示该边不存在 #include <iostream> #include <cstdio> #in ...

  9. 网络流算法学习笔记——最大流问题基本概念和Ford-Fulkerson方法(标号法C++实现)

    屈婉玲<算法设计与分析>第2版第7章网络流算法学习笔记. 基本概念 最大流问题,相当于有从s到t的供水系统,每段路径都有限定流量,除了s.t两地外,每个中间点都不能滞留,从s流入多少,就从 ...

最新文章

  1. C#利用lambda在函数中创建内部函数
  2. CF990G GCD Counting(树上莫比乌斯反演,分层图,并查集)
  3. @EnableScheduling和@Scheduled的使用(初级)
  4. ENode 2.8 最新架构图简介
  5. C this指针的理解和作用
  6. est.java 2 错误 找不到符号_找不到Cython/Python符号PyString\u Typ
  7. navicat不同数据库数据传输
  8. 编程语言开发编程语言_D编程语言是开发的绝佳选择的5个理由
  9. 判断深度学习模型的稳定性_基于深度学习的三维模型检索算法研究
  10. 这类程序员,钱包要鼓了!
  11. groovy环境搭建,配置报错
  12. 电脑重启 硬件问题引发的人品问题
  13. (1)初识云计算-《云计算核心技术剖析》学习笔记
  14. 金山词霸没有响应, 金山词霸与卡巴冲突问题解决方法?
  15. python代理ip连接失败_遇到问题--python--爬虫--使用代理ip第二次获取代理ip失败
  16. 什么是TOC? 论文不通过?TOC请了解一下 | SCI-HUA科画技法
  17. 嵌入式字符设备驱动——ULN2003步进电机驱动程序实现
  18. 基于asp.net学生信息管理系统的设计与实现(毕设)
  19. VS2019:添加现有项目 / 现有cpp文件
  20. 本地计算机无法启动错误1068,Win7系统启动失败并提示错误1068的解决办法

热门文章

  1. win7计算机文件浏览不了,win7系统计算机文件打不开的解决方法
  2. 基于 FPGA 的高级数字电路设计(7)单口 RAM、同步 FIFO、异步 FIFO 设计
  3. WM_PIANT消息与窗口重画
  4. netstat -ano 'netstat' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  5. 小米盒子挂载ext4移动硬盘
  6. RoboCup仿真3D底层通信模块介绍(二)
  7. Ubuntu系统键盘背光灯不亮解决办法
  8. 唤醒手腕 - 人工智能 - 凸优化、损失函数、概率、激活函数、泛化拟合、回归分类 ···
  9. 今天遇到一个报错信息
  10. Q上多项式可约性深化定理