初學網路流

2022-08-19 05:57:09 字數 1773 閱讀 2157

這個主題以前沒接觸過,覺得有點抽象,演算法有點不太清楚,看了一些部落格,下面,對這些部落格做些總結。

具體參考這篇部落格的背景知識講解部分(具體到**之前),首先對網路流有了乙個初步的印象

然後一些概念性的定義,具體參考這篇部落格,對一些可能會影響到演算法理解的基礎概念進行掌握

然後接觸到演算法,顯示ff(ford-fulkerson)演算法的思想,用的是dfs,主要理解增加的反向邊和演算法的流程。然後是ek演算法,也是上面一篇部落格

對演算法大致了解後可以看看例項,上面一篇部落格的圖是個理解負向邊很好的例子,加上這篇部落格

結合演算法對例項的分析

下面就可以看**了,主要是這幾篇部落格比較清晰:

最後的總結這篇部落格更適合:分析的比較細,雖然我還不太真正的明白在講些什麼,但估計熟悉以後就會明白了吧

//edmonds karp

#include #include #include #include #define maxn 1005

#define inf 0x3f3f3f3f

using namespace std;

struct edge

};struct edmondskarp

}if(a[t]) break;//若已拓展到t點,跳出

}if(!a[t])//若無法到達a點,說明無增廣路,結束演算法

for(int u = t;u!=s;u=edges[p[u]].from)//從t開始向前更新路徑上的流

flow += a[t];

}return flow;

}};

//ford fulkerson

#include #include #include #define maxn 1005

#define inf 0x3f3f3f3f

using namespace std;

struct edge

;vectorg[maxn];//圖的鄰接表表示

bool used[maxn];//dfs中用到的訪問標記

void add_edge(int from,int to,int cap)

);//記錄反向邊在to個節點的vector中的位置

g[to].push_back((edge));

}int dfs(int v,int t,int f)}}

return 0;//未找到增廣路

}int max_flow(int s,int t)

flow += f;

}}

//dinic

#include #include #include #include #define maxn 1005

using namespace std;

struct edge

;vectorg[maxn];//圖的鄰接表表示

int level[maxn];//頂點到原點的距離標號

int iter[maxn];//當前弧,在之前的變已經沒有用了

void add_edge(int from,int to,int cap)

); g[to].push_back((edge));

}//通過bfs尋找從原點出發的且未滿流的距離標號

void bfs(int s)}}

}//通過dfs尋找增廣路

int dfs(int v,int t,int f)}}

return 0;//找不到增廣路

}

以上模板的表示方式都不太一樣,理解後可方便自己選擇

初學網路流(超詳細) 保證弄懂

最近在學習二分圖匹配,網路流和博弈論 eazy,miaomiao,lsr dalao,zyh,zlt 感謝諸位牛犇給蒟蒻的講課,讓我受益匪淺,ppt就不放上來了,有版權問題,下面我給大家談談我近期學習網路流的心得。因為前幾天感冒落了些進度,感謝ergeda和腦屁股的細心輔導 微笑吐舌頭 根據lsr ...

網路流 費用流

這個好像不考 沒事可以騙分 費用流,顧名思義,就是有費用的流,也就是說,給乙個網路流圖中的每條弧增加乙個單位流量費用。一般來說求解的費用流都是最大流最小費用。好像沒什麼好bb的 這裡推薦使用zkw演算法求解最小費用流,看著 理解就行,應該還是很好理解的。zkw演算法在稠密圖上跑得飛快,在稀疏圖上還不...

網路流 費用流

網路流有很多種類 其中最大流 有增廣路演算法和預流推進演算法。增廣路演算法就是不斷的新增增廣路。其中的dinic演算法。會稍微提到isap演算法 poj1273 首先想到dfs一直往後延伸,然後從源點到匯點計算每條路,但是這樣只是單條路的最值,有時可能因為走一條路而間接的認定了除這條路以外的某個路通...