Anda di halaman 1dari 9

Algoritmo De Floyd

Warshall
MIGUEL ANGEL VASQUEZ ZUÑIGA
DANIEL ALEXANDER PETERSON
RONALD BENITEZ
MARLON BABIILONIA
 El algoritmo de Floyd-Warshall permite calcular todos los costos de
camino mínimo desde cualquier vértice del grafo en una sola
ejecución
 • El algoritmo funciona con aristas etiquetadas con números
negativos, pero puede generar efectos no deseados
 • El algoritmo solamente devuelve el costo del camino mínimo, más
no el camino mínimo en sí.
 • Para operar, se debe generar la matriz de adyacencia para el
grafo que será analizado
 • Luego, se opera sobre la matriz de adyacencia para generar
todos los caminos de costo mínimo
Como funciona

 En informática, el algoritmo de Floyd-Warshall, descrito en 1959 por


Bernard Roy, es un algoritmo de análisis sobre grafos para encontrar
el camino mínimo en grafos dirigidos ponderados.
El algoritmo encuentra el camino entre todos los pares de vértices
en una única ejecución.
Floyd
Seudocódigo
 Convenientemente, cuando calculamos el k-esimo caso, se puede
sobrescribir la información salvada en la computación k -1. Esto significa
que el algoritmo usa memoria cuadrática. Hay que cuidar la inicialización
de las condiciones:

1 /* Suponemos que la función pesoArista devuelve el coste del camino que va de i a j


2 (infinito si no existe).
3 También suponemos que es el número de vértices y pesoArista(i,i) = 0
4 */
5
6 int camino[][];
7 /* Una matriz bidimensional. En cada paso del algoritmo, camino[i][j] es el camino mínimo
8 de i hasta j usando valores intermedios de (1..k-1). Cada camino[i][j] es inicializado a
9
10 */
11
12 procedimiento FloydWarshall ()
13 para k: = 0 hasta n − 1
14
15 camino[i][j] = mín ( camino[i][j], camino[i][k]+camino[k][j])
16
17 fin para
Floyd
 El algoritmo de Floyd trabaja con grafos ponderados. Es decir, el valor de la “flecha” que
representamos en la matriz puede ser cualquier entero o infinito. Infinito marca que no existe
unión entre los nodos. Esta vez, el resultado será una matriz donde estarán representadas
las distancias mínimas entre nodos, seleccionando los caminos más convenientes según su
ponderación (“peso”). Por ejemplo, si de “A” a “B” hay 36 (km), pero de “A” a “C” hay 2(km) y
de “C” a “B” hay 10 (km), el algoritmo nos devolverá finalmente que de “A” a “B” hay 12 (km).
 Los pasos a dar en la aplicación del algoritmo de Floyd son los siguientes:
 * Formar las matrices iniciales C y D.
 * Se toma k=1.
 * Se selecciona la fila y la columna k de la matriz C y entonces, para i y j, con i≠k, j≠k e i≠j,
hacemos:
 Si (Cik + Ckj) < Cij → Dij = Dkj y Cij = Cik + Ckj
 En caso contrario, dejamos las matrices como están.
 * Si k ≤ n, aumentamos k en una unidad y repetimos el paso anterior, en caso contrario
páramos las interacciones.
 * La matriz final C contiene los costes óptimos para ir de un vértice a otro, mientras que la
matriz D contiene los penúltimos vértices de los caminos óptimos que unen dos vértices, lo
cual permite reconstruir cualquier camino óptimo para ir de un vértice a otro.
ejemplo
Algoritmo

 FloydWarshall()
 para k=0,N-1
 para i=0,N-1
 para j=0,N-1
 si(matrizAdyacencia[i,k]+matrizAdyacencia[k,j] <
matrizAdyacencia[i,j])
 matrizAdyacencia[i,j] = matrizAdyacencia[i,k]+matrizAdyacencia[k,j]
 fin-si
 fin-para
 fin-para
 fin-para
 fin-FloydWarshall
Objetivo principal de floyd

Anda mungkin juga menyukai