網路流講解和基本實現

2021-07-30 21:48:18 字數 1078 閱讀 9317

/*

最大網路流的問題可以有如下的概括:

首先地圖上有n個節點,有m條有向邊

有這麼乙個節點,入度為0,定義為源節點,一般定義為1節點

有這麼乙個節點,出度為0,定義為匯節點,一般定義為n節點

所有的m條邊都有兩個屬性,容量和流量,流量<=容量,沒有距離這個屬性

對於除了1號n號節點,所有節點的進入流量等同於流出流量

最大流問題:

問從源節點發出最大多大的流量,以至於不超過所有邊的容量限制到達匯節點

打個比方:

從乙個地方可以開出無限量卡車,可以通過多條路徑到達目同乙個的地,

但是對於道路由於與車道是有限的,定義所有道路的長度一樣,車子的速度都是一樣的,所以單位時間內通行的車輛是有限的(流量<=容量)

那麼源點最多同時發出多少輛車才能使得每條道路都不超過飽和的情況下,讓所有發出的車都到達匯點

*/#include

#include

#include

#include

using

namespace

std;

const

int maxn = 107;

int r[maxn][maxn];//r[i][j]表示從i到j的剩餘流量

int pre[maxn];//前驅及誒單

int q[maxn];//佇列

bool vis[maxn];

int n, m;

bool bfs(int s, int f)//通過bfs找到每一次可行的最短節點

for (int i = 1; i <= n; i++)}}

return

false;

}int edmondskarp(int s, int f)

p = f, pp = pre[f];

while (pp != -1)

flow += d;

}return flow;

}int main()

printf("%d\n", edmondskarp(1, n));

}return

0;}

網路流 費用流Ek演算法講解

前一篇部落格寫的是最大流。先簡要說一下思路,方便下面的講解。最大流求解是先跑一遍bfs,把每個點定義乙個深度,跑dfs的同時連線一條反向邊方便反悔,避免不必要的時間。現在說一下費用流。費用流的全稱是最小費用最大流 或最大費用最大流 保證最小費用的情況下跑最大流。最小費用?bfs spfa成功解決。我...

網路流 Edmons Karp 演算法講解

網路流ek演算法 資料結構 佇列 主要操作 廣搜 記錄路徑 更新 能解決的問題 最大流 最小割 複雜度 o mv v指最大容量,m指邊數。新名詞 1.增廣路 從源點source到tink的一條簡單路,如果路上的每條邊 u,v 的可改進量均大於0,則稱這條路為一條增廣路。增廣路定理 網路達到最大流量當...

網路流基本概念和定義

問題 rightarrow 某種方式建圖的網路流 rightarrow 網路流解與原問題解是否等價。流網路是乙個有向圖 g 其中有兩個特殊點 s,t in v 分別為源點和匯點。g 中每一條邊有乙個 ge 0 的權值,稱作邊的容量,邊 u,v 容量可記做 c u,v 源點相當於乙個水源,匯點相當於乙...