ソースからシンクまでの経路をどのようにして確認できますか? BFSの修正バージョンを使用しています。シンクに達するまではソースからBFSを行い、残りの容量(つまり、そのエッジの最大容量 - 現在のフロー> 0)がある場合にのみエッジをトラバースします。また、ソースからシンクまでのこのパスでは、そのパスを通過できる最大フローである最小残存容量を維持します。
bool maxFlowAchieved = false;
int maxFlow = 0; // keeps track of what is the max flow in the network
while(!maxFlowAchieved)
{
//BFS returns collection of Edges in the traversal order from source to sink
std::vector<Edge*> path = BFS(source, sink);
maxFlowAchieved = path.size() == 0; // all paths exhausted
if(maxFlowAchieved)
break;
// traverse each edge in the path and find minimum residual capacity
// edge->residual = edge->maxCapacity - edge->currentflow
int allowedFlow = GetMinResidualOnPath(path);
// Now add additional flow to each edge in the path.
// i.e. for each edge in path, edge->currentflow += allowedFlow
// clearly, edge->currentflow + allowedFlow <= edge->maxCapacity
SaturatePath(path, allowedFlow);
maxFlow += allowedFlow;
}
return maxFlow;
拡張パスは、パスではなく、プロセスではなく**パス**です(名前で暗示されます)。フロー検出アルゴリズムを最適化する**プロセス**はフローアルゴリズムです。 –