/*
name: 最大流問題預流推進演算法
author: 巧若拙
date: 14-06-17 09:26
description: 改進的預流推進演算法,有如下優化:
進行了預先逆序bfs分層,
利用結點鍊錶,每次都是從高度最大的結點開始處理.
*/#include#include using namespace std;
typedef struct vertexnode vertexnode;
const int maxv=2000; //最大頂點數量
const int maxe=2000; //最大邊數量
const int infinity = 0x7fffffff; //無窮大
int capacity[maxv][maxv]; //記錄殘流網路的容量
int flow[maxv]; //標記當前節點的剩餘流量
int dis[maxv]; //標記節點所在的層次
vertexnode *head; //儲存頂點表結點資訊
int maxflow_relabel_to_front(int src, int des, int n) ;
bool bfs(int src, int des, int n); //廣度優先搜尋構造分層網路
void check(int u, int n); //對頂點u進行預流推進或重新標號操作,直到其剩餘流量為0
int main()
fcin >> n >> m;
for(int i=0; i> u >> v;
fcin >> capacity[u][v];
}
cout << n << " " << m << endl;
for (int i=0; i0)
}} //沒有可以push的頂點,執行relabel
if (relabel)
}dis[u] = minlevel + 1;
printf("relabel %d height to %d\n", u, dis[u]);
} }
}
int maxflow_relabel_to_front(int src, int des, int n)
}
vertexnode *pre = head;
while (pre->next)
pre = pre->next; //檢視下乙個結點} }
p = head->next;
while (p)
return flow[des];
}
bool bfs(int src, int des, int n)//逆向廣度優先搜尋構造分層網路,若不存在增廣路,則返回false
}
return true;
}
最大流問題預流推進演算法(最基本)
name 最大流問題預流推進演算法 author 巧若拙 date 14 06 17 09 26 description 最基本的預流推進演算法,沒有任何優化,每次遍歷所有的結點,找出活結點,尋找可行弧,並預流推進,若沒有可以push的頂點,執行relabel操作。include include u...
網路最大流演算法 最高標號預流推進HLPP
這個演算法。怎麼說.學來也就是裝裝13吧。長得比ek醜 跑的比ek慢 寫著比ek難 大家先來猜一下這個演算法的思想吧 joy 看看人家的名字 最高標號預留推進 多麼高階大氣上檔次2333333咳咳 從它的名字中我們可以看出,它的核心思想是 推進,而不是找增廣路 那麼它是怎麼實現推進的呢?很簡單,我們...
網路流一 最大流EK演算法(bfs)
poj 1273 網路流最大流ek演算法 時間複雜度上限為nm 2 include include include include using namespace std define maxn 0x7fffffff int n,m int gra 210 210 int pre 210 int f...