¿Y cómo averiguas el camino de aumento de la fuente al sumidero? Usando la versión modificada de BFS. Hace BFS desde la fuente hasta llegar al sumidero y recorre un borde solo si tiene capacidad residual (es decir, para ese borde, su capacidad máxima - flujo de corriente> 0). Y para este camino desde el origen al sumidero, mantienes la capacidad residual mínima, que es el flujo máximo que puedes atravesar por ese camino. Alto nivel de fragmento de código para obtener la idea:
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;
Una ruta de aumento es ** ruta ** (como lo indica su nombre) y no es un proceso. El ** proceso ** de optimización de las rutas de aumento de búsqueda de flujo es un algoritmo de flujo. –