Algoritmo Ford Fulkerson

Flujo Máximo

El algoritmo de Ford-Fulkerson propone buscar caminos en los que se pueda aumentar el flujo, hasta que se alcance el flujo máximo. Es aplicable a los Flujos maximales. La idea es:

Sea G(V,E) un grafo, con V vértices, E aristas y donde por cada arista (u,v), tenemos una capacidad c(u,v) y un flujo f(u,v). Se busca maximizar el valor del flujo desde una fue$

El método inicia con f(u,v)=0 para toda (u,v) en V. En cada iteración, se incrementa el flujo en G mediante el resultado de una búsqueda de un camino de aumento en una red

El flujo a aumentar se debe considerar legal, es decir:

El flujo de para toda arista (u,v) no debe ser mayor que la capacidad de dicha arista. El flujo que sale de la fuente s debe ser igual al que llega al sumidero t.

Nota: En una red con fuente s y sumidero t único el valor máximo que puede tomar un flujo variable es igual a la capacidad mínima que puede tomar un corte.

Red residual

Definimos una red residual $G_{f}(V,E)$ como la red donde la capacidad de cada una de las aristas se define como $c_{f}(u,v) = c(u,v) − f(u,v)$ , donde c(u,v) es la capacidad de$

Intuitivamente, dado el grafo G y un camino de aumento $c_{F}$ , la red residual $G_{f}$ consiste en el grafo que representa el como cambia la capacidad de cada una de las arist$

Caminos de aumento

Un camino de aumento es un camino dirigido de la fuente s al sumidero t en $G_{f}$, donde la capacidad del camino de aumento es el mínimo de las capacidades de sus aristas.

Pseudocódigo

Ford-Fulkerson(G,s,t) { Gf = Crear_grafo_residual(G); for (cada arista (u,v) de E) {

f[u,v]= 0;

} while (exista un camino p desde s a t en la red residual Gf) {

cf(p) = min{cf(u,v): (u,v) está sobre p}; for (cada arista (u,v) en p) {

f[u,v]= f[u,v] + cf(p); f[v,u]= f[v,u] - cf(p);

} Actualizar_grafo_residual(Gf);

}

}