乙個簡單的最大流演算法

2021-07-15 00:19:08 字數 690 閱讀 2211

《資料結構與演算法分析——c語言描述》  第九章 圖論演算法

graph裡面增加乙個函式

void setweight(double weight, edgenodeptr p) 

}

深度搜尋、簡單的最大流

vertex startvex, endvex;//起點,終點

graph gr;//殘餘圖

graph gf;//流圖

double minweight;//一條路徑的最小權

bool dfs(vertex v,double prevmin)

for (edgenodeptr p = getedgenodeptr(v, gr); p;p=advance(p))

p = advance(p);

} return false;

}int main()

if (tag2 && getedgenodeptr(i, gr) == null)

} double sum = 0;

while (dfs(startvex, dbl_max))

sum += minweight;

printf("maximum flow:%g\n", sum);

printgraph(gf);

}

最大流(一) Edmond Karp演算法

ek演算法為最短增廣路演算法,具體步驟 1 初始化網路中所有邊的容量 c u v 為該邊的容量,同時反向邊 c v u 為0,初始化最大流為0。2 在殘留網路中找一條從源s到匯t的增廣路p。如果能找到,轉步驟 3 如果不能找到,則轉步驟 5 3 在增廣路p中找到所謂的 瓶頸 邊,即路徑中的最小邊,記...

最大流演算法之一 EK演算法

ek演算法的流程很簡單 隨意找乙個可行流作為流量網路更新的基礎 一般題目沒有規定可以採用流量為0的可行流 利用bfsb fs找一條從源點到匯點的可行流路徑 用新找到的可行流路徑更新原有流量網路 先找到該可行流路徑中流量最小邊,然後將該路徑上所有正向邊都減去該最小邊的流量,反向邊都加上該最小邊的流量 ...

乙個簡單的迷宮演算法

迷宮問題的求解是乙個典型的問題,那仫如何找到迷宮的出口?在遇到死胡同的時候如何返回?如何防止走重複的路程?這就是我們要解決的問題了.要列印乙個簡單的迷宮,我們理所當然的想到了利用二維陣列,在迷宮的實現中我定義了乙個mazemap.txt的檔案用來儲存迷宮,在初始化的時候只需要將該迷宮從mazemap...