Và làm thế nào để bạn tìm ra đường dẫn tăng thêm từ nguồn đến bồn rửa? Sử dụng phiên bản BFS đã sửa đổi. Bạn làm BFS từ nguồn cho đến khi bạn đạt đến bồn rửa và bạn đi qua một cạnh chỉ khi nó có dung lượng dư (tức là đối với cạnh đó, dung lượng tối đa của nó - dòng chảy hiện tại> 0). Và đối với con đường này từ nguồn đến bồn rửa, bạn duy trì công suất dư tối thiểu, đó là lưu lượng tối đa bạn có thể đi qua con đường đó. Đoạn mã cấp cao để có ý tưởng:
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;
Đường dẫn tăng thêm là ** đường dẫn ** (như được gợi ý theo tên của nó) chứ không phải quy trình. ** Quá trình ** tối ưu hóa luồng tìm kiếm làm tăng đường dẫn là một thuật toán dòng chảy. –