¿Estás confundido a la hora de elegir el camino más corto desde tu ubicación hasta el destino? Entonces, debes conocer este algoritmo.
- El Algoritmo de Floyd-Warshall se utiliza para encontrar los caminos más cortos entre todos los pares de vértices de un gráfico, donde cada arista del gráfico tiene un peso que es positivo o negativo.
- La mayor ventaja de utilizar este algoritmo es que todas las distancias más cortas entre 2 vértices cualesquiera pueden calcularse en O(V3), donde V es el número de vértices de un grafo.
- El algoritmo de Floyd-Warshall también se denomina algoritmo de Floyd, algoritmo de Roy-Floyd, algoritmo de Roy-Warshall o algoritmo WFI.
- Este algoritmo sigue el enfoque de programación dinámica para encontrar los caminos más cortos.
Algoritmo
Para un grafo con N vértices:
Paso 1: Inicializar los caminos más cortos entre 2 vértices cualesquiera con Infinito.
Paso 2: Encontrar todos los caminos más cortos pares que utilizan 0 vértices intermedios, luego encontrar los caminos más cortos que utilizan 1 vértice intermedio y así sucesivamente.. hasta utilizar todos los N vértices como nodos intermedios.
Paso 3: Minimizar los caminos más cortos entre 2 pares cualesquiera en la operación anterior.
Paso 4: Para 2 vértices cualesquiera (i,j) , en realidad hay que minimizar las distancias entre este par utilizando los primeros K nodos, por lo que el camino más corto será: min(dist+dist,dist).
dist representa el camino más corto que sólo utiliza los primeros K vértices, dist representa el camino más corto entre el par k,j. Como el camino más corto será una concatenación del camino más corto de i a k, luego 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 );
}
}
}
Ejemplo
Sea el grafo dado:
Siga los pasos siguientes para encontrar el camino más corto entre todos los pares de vértices.
- Crear una matriz
A0
de dimensiónn*n
donde n es el número de vértices. La fila y la columna se indexan como i y j respectivamente. i y j son los vértices del grafo.
Cada celda A se rellena con la distancia del vértice ith
al vértice jth
. Si no hay camino desde el vértice ith
al vértice jth
, la celda se deja como infinita.