博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj1273 最大流
阅读量:4153 次
发布时间:2019-05-25

本文共 1938 字,大约阅读时间需要 6 分钟。

用的是EdmondsKarp

程序可以再优化的,懒得优化了

EdmondsKarp

#include 
#include
#include
#include
#include
using namespace std;const int maxNode = 202;int N = 201;//edgeint M = 201;//nodeconst int maxInt = numeric_limits
::max();int g[maxNode][maxNode];int f[maxNode][maxNode];int residual[maxNode][maxNode];int pre[maxNode];bool BFS(){ queue
q; q.push(1); memset(pre,0,sizeof(int)*(M+1)); int used[maxNode]; memset(used,0,sizeof(int)*(M+1)); used[1] = 1; while (!q.empty()) { int curr = q.front(); q.pop(); for (int i=1;i<=M;++i) { if(residual[curr][i]>0 && !used[i]) { pre[i] = curr; if(i==M) return true; q.push(i); used[i] = 1; } } } return false;}void EdmondsKarp(){ while (BFS()) { int minF = maxInt; int curr = M; int beg=0,end = 0; while (curr!=1) { int preNode = pre[curr]; if(minF > residual[preNode][curr]) { minF = residual[preNode][curr]; beg = preNode; end = curr; } curr = preNode; } curr = M; while (curr != 1) { int preNode = pre[curr]; f[preNode][curr] +=minF; residual[preNode][curr] -=minF; residual[curr][preNode] = f[preNode][curr]; curr = preNode; } } int sum=0; for (int i=1;i

下面是别人优化的比较好的

#include
#include
#include
using namespace std;#define inf INT_MAXint n,m,a[205][205],pre[205];int bfs(){ queue
Q; Q.push(1); pre[1]=0; memset(pre,-1,sizeof(pre)); int t,i; while(!Q.empty()) { t=Q.front(); Q.pop(); for(i=2;i<=n;i++) if(pre[i]==-1&&a[t][i]>0) { pre[i]=t; Q.push(i); if(i==n) return 1; } } return -1;}int maxflow(){ int res=0,ans,t; while(bfs()==1) { t=n; ans=inf; while(t!=1) { if(a[pre[t]][t]

最大流效率更高的算法为:

Push-Relabel算法

Relabel-to-Front算法()

Preflow-Push算法

Dinic算法(可以参考国家集训队 2007 王欣上《浅谈基于分层思想的网络流算法》)

转载地址:http://jbeti.baihongyu.com/

你可能感兴趣的文章
Openwrt源码下载与编译
查看>>
我和ip_conntrack不得不说的一些事
查看>>
Linux 查看端口使用情况
查看>>
文件隐藏
查看>>
两个linux内核rootkit--之二:adore-ng
查看>>
两个linux内核rootkit--之一:enyelkm
查看>>
关于linux栈的一个深层次的问题
查看>>
rootkit related
查看>>
配置文件的重要性------轻化操作
查看>>
又是缓存惹的祸!!!
查看>>
为什么要实现程序指令和程序数据的分离?
查看>>
我对C++ string和length方法的一个长期误解------从protobuf序列化说起(没处理好会引起数据丢失、反序列化失败哦!)
查看>>
一起来看看protobuf中容易引起bug的一个细节
查看>>
无protobuf协议情况下的反序列化------貌似无解, 其实有解!
查看>>
make -n(仅列出命令, 但不会执行)用于调试makefile
查看>>
makefile中“-“符号的使用
查看>>
go语言如何从终端逐行读取数据?------用bufio包
查看>>
go的值类型和引用类型------重要的概念
查看>>
求二叉树中结点的最大值(所有结点的值都是正整数)
查看>>
用go的flag包来解析命令行参数
查看>>