El
algoritmo de Floyd - Warshal fue creado por el informático Robert W. Floyd en 1962, como necesidad de encontrar
el camino más corto entre los nodos o vértices de un grafo, similar a construir
una tabla con las distancias mínimas entre varias ciudades en un mapa, además
indicando la ruta a seguir para pasar de una a otra.
Como ejemplo, se utilizara el siguiente grafo:
Para la
tabla ponderaciones, se marca el camino principal (-), luego, los valores para
cada vértice, en caso de que un vértice no cuente con valor (como lo es de D al
C, basta con colocar el símbolo infinito ∞.
La tabla
recorrido, se llenara con la variable de cada columna, tal como se muestra en
la imagen anterior.
2)
Teniendo en cuenta las variables principales (A, B, C, D) se procede con la
siguiente validación.
Tomando
el primer nodo A, se identifica tanto la fila como la columna que le corresponde:
Verificamos
que el la suma de los valores de BA y AB sea mayor a BB, si cumple esta condición,
se deja el valor de BB sin cambios, de ser menor, se procede a cambiar su valor
por la sumatoria resultante:
Cumple la condición |
Cumple la condicion |
Cumple la condición |
Cumplen la condición |
No cumple la condicíón |
En el
caso anterior, la suma entre DB y AB es igual a 11, teniendo en cuenta que el
valor de DB es infinito, no se cumple la condición de que la sumatoria sea
mayor, por lo que se reemplaza el valor de DB por 11, y en la tabla recorrido
cambiamos el valor de DB por A, ya que es el nodo sobre el cual se está
realizando el proceso, resultando:
Se continúa
con la validación teniendo como base el nodo A:
No cumple la condicion |
Como no
cumple la condición, se cambia el valor de DC en la tabla ponderaciones por el
resultado de la suma (12), así como en la tabla recorrido se cambia el valor de
DC por A:
Continuando con el recorrido:
Cumple la condición |
3) Una
vez finalizada la validación teniendo como base el nodo Ha, se procede a
realizar el mismo procedimiento para B, C y D, teniendo en cuenta las
observaciones anteriormente dadas.
En caso
de que al finalizar la validación para A, B, C y D, y aun aparezca en la tabla
ponderaciones valores infinitos, iniciamos de nuevo la validación, hasta que no
aparezcan los símbolos negativos, resultando en este caso para las tablas
ponderaciones y recorrido:
4) Una
vez se tienen las tablas ponderaciones y recorrido, se procede a verificar los
caminos más cortos para llegar de un nodo a otro.
Por
ejemplo (tomando como guía la tabla recorrido), si quiero llegar del nodo A al
nodo D, se indica que el recorrido más corto es pasar por el nodo C, el
cual consta de un valor de recorrido 7 (en base a la tabla ponderaciones).
Código C++:
No hay comentarios.:
Publicar un comentario