Escolar Documentos
Profissional Documentos
Cultura Documentos
Ford Fulkerson
Ford Fulkerson
Observação: Cada aresta do grafo original pode dar origem a no máximo duas arestas
correspondentes a ela no grafo residual, já que se possuir um fluxo positivo que seja
menor que sua capacidade, uma aresta de mesma direção será criada para representar o
fluxo a mais que ainda pode ser carregado, e uma aresta de direção oposta será inserida
para representar o fluxo existente que pode retroceder caso seja necessário para a
otimização do problema. Resumindo, pode possuir até duas vezes o número de arestas
de .
Assim, para definir como será feito o aumento gradual de fluxo que entrará na rede (ou
seja, em ), até que o máximo seja atingido, o restante do algoritmo baseia-se
principalmente no grafo residual, alterando sua configuração a cada aumento realizado.Os
passos seguintes realizados pelo algoritmo, após a criação do grafo residual, estão
descritos a seguir:
Seja um caminho simples s-t de aquele que vai da fonte até o
terminal passando por cada aresta uma única vez. O primeiro passo do
algoritmo é encontrar um caminho simples s-t qualquer que exista no grafo
residual. Esse caminho é chamado de caminho de aumento;
Escolhido o caminho de aumento, o segundo passo é procurar a aresta
pertencente a ele que possui o menor valor (capacidade). Vamos chamar tal
valor de ;
Analisamos cada aresta do caminho escolhido. Se possui direção s-t (i.e., a
mesma direção que possui no gráfo original, levando o fluxo de para ), então
procuramos a aresta correspondente em e aumentamos seu
fluxo em unidades: .
Em contrapartida, se possuir direção inversa (apontando de para ), então
modificamos a sua correspondente em G diminuindo seu fluxo em unidades: ;
Reconfiguramos para os novos valores das arestas de e
repetimos os passos anteriores até que nao haja mais nenhum
caminho de aumento no grafo residual para ser analisado. Quando
isso acontecer, o fluxo presente em será o fluxo máximo.
função Atualiza-Grafo-Residual(G, f)
Para cada aresta a(u,v) em G, , com u,v∈N
Se f(a) < ca então
insira aR(u,v) com ca =(ca - f(a))
R
Retorna(GR)
função Ford-Fulkerson(G, s, t)
Inicia f(a)=0 para cada aresta a de G
Defina GR = Atualiza-Grafo-Residual(G, f)
Enquanto existir caminho de aumento de s para t em GR
Seja P um caminho de aumento s-t em GR
Defina cP = min{caR : aR∈P}
Para cada aresta aR em P
Se aR tem direção s-t então
faça [f(a) → f(a) + cP] em G
Caso contrário
faça [f(a) → f(a) - cP] em G
GR = Atualiza-Grafo-Residual(G, f)
Retorna (f)