Confused para escolher o caminho mais curto desde a sua localização até ao destino… Então, você deve saber sobre este algoritmo.
- Floyd-Warshall’s Algorithm é usado para encontrar os caminhos mais curtos entre todos os pares de vértices em um gráfico, onde cada borda no gráfico tem um peso que é positivo ou negativo.
- A maior vantagem de usar este algoritmo é que todas as distâncias mais curtas entre quaisquer 2 vértices podem ser calculadas em O(V3), onde V é o número de vértices num gráfico.
- O algoritmo Floyd-Warshall também é chamado de algoritmo Floyd’s, algoritmo Roy-Floyd, algoritmo Roy-Warshall, ou algoritmo WFI.
- Este algoritmo segue a abordagem de programação dinâmica para encontrar os caminhos mais curtos.
Algoritmo
Para um gráfico com N vértices:
Passo 1: Inicialize os caminhos mais curtos entre quaisquer 2 vértices com Infinity.
Passo 2: Encontre todos os pares de caminhos mais curtos que usam 0 vértices intermediários, depois encontre os caminhos mais curtos que usam 1 vértice intermediário e assim por diante… até usar todos os N vértices como nós intermediários.
Passo 3: Minimizar os caminhos mais curtos entre quaisquer 2 pares na operação anterior.
Passo 4: Para quaisquer 2 vértices (i,j) , deve-se realmente minimizar as distâncias entre este par usando os primeiros nós K, então o caminho mais curto será: min(dist+dist,dist).
dist representa o caminho mais curto que usa apenas os primeiros vértices K, dist representa o caminho mais curto entre o par k,j. Como o caminho mais curto será uma concatenação do caminho mais curto de i a k, então de k a j.
for(int k = 1; k <= n; k++){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
dist = min( dist, dist + dist );
}
}
}
Exemplo
Deixe o gráfico dado ser:
Seguir os passos abaixo para encontrar o caminho mais curto entre todos os pares de vértices.
- Criar uma matriz
A0
de dimensãon*n
onde n é o número de vértices. A linha e a coluna são indexadas como i e j respectivamente. i e j são os vértices do gráfico.
Cada célula A é preenchida com a distância do vértice ith
até ao vértice jth
. Se não houver caminho de ith
vértice para jth
vértice, a célula é deixada como infinito.