Sei sulla pagina 1di 6

"Ao de la Integracin Nacional y el Reconocimiento de Nuestra Diversidad

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN

FACULTAD DE INGENIERA
ESCUELA acadmico PROFESIONAL DE ingeniera en informtica y sistemas

TEMA

: MODELOS DE REDES - ALGORITMO DE FLOYD - WARSHALL

CURSO

: PROGRAMACIN MATEMTICA I

DOCENTE

: MANUEL ALVARADO CONTRERAS

ESTUDIANTE

: FIORELLA ESTRADA CRDENAS

CDIGO

: 2009-34062

AO

: 3 B

TACNA PER 2012

ALGORITMO DE FLOYD - WARSHALL

El algoritmo de Floyd-Warshall es uno de los que se han creado para encontrar el camino ms cortos entre nodos, la gracia de este radica en que trabaja con programacin dinmica, lo que garantiza que la solucin entregada por ste algoritmo es ptima, adems que entrega todos los caminos ms cortos para ir desde un nodo i a un nodo j cualquiera y el recorrido necesario para completar el dicho recorrido. Entrada: o Grafo dirigido/no dirigido, con peso asociado a las aristas. Salida: o Matriz Dn que entrega el menor camino para ir de un nodo i a un nodo j del grafo. o Matriz Sn que entrega el nodo intermedio para llegar desde un nodo i a un nodo j del grafo. CODIGO C++

Floyd-Warshall (G) n=|V [G]| for (int i=1; i<=numeroNodos; i++) for (int j=1; j<=numeroNodos; j++) si Hay conexin MatrizdePeso[i][j]=peso; else MatrizdePeso[i][j]=infinito; MatrizNodoIntermedio[i][j]=j; Si i=j MatrizNodoIntermedio[i][j]=0; MatrizdePeso[i][j]=0; for(int k=1;k<=numeroNodos;k++) for(int i=1;i<=numeroNodos;i++) for(int j=1;j<=numeroNodos;j++) a=MatrizdePeso[i][k]+MatrizdePeso[k][j]; i f(a<MatrizdePeso[i][j]) { MatrizdePeso[i][j]=a; MatrizNodoIntermedio[i][j]=k; } return MatrizdePeso, MatrizNodoIntermedio;

Como sabemos, en el computador no se puede representar el infinito, por lo tanto, cuando no exista conexin entre dos nodos, inicialic ese peso con 100000, sabiendo que ste no es nmero tan grande si es que queremos representar pesos elevados, pero como el desarrollo de esta aplicacin fue pensada con fines pedaggicos y no profesionales, en ese caso no importaba mucho. Veamos un ejemplo de cmo trabaja el algoritmo: Sea el grafo:
1

8 2 2 4 1

9 3

Matriz de Peso

Matriz Nodos Intermedios

D0 1

4 1

S0 1

3 3

4 4
4 4

1
2 1 3 1

2 3 2

1 2 3 4 4 2 9

Como vemos ac, el algoritmo no permite que existan nodos que apunten a s mismos, ya que las diagonales quedan inhabilitadas.

4 1 2

La matriz D0 se llena con los pesos de cada camino que representa la matriz[i][j] del ejemplo, como vemos, si no existe conexin entre los nodos, se completa con el smbolo lo que reprenda que no existe la conexin entre los nodos, por lo tanto el peso que trae pasar por ah no se puede tasar. La matriz S0 se llena con los nodos intermedios entre un par de nodos, en este caso suponemos que no existe otro camino entre los nodos que ir directamente hacia ellos. Luego de completar las primeras matrices, comenzamos fijando una fila y una columna pivote, para ver todos los caminos que existen entre el nodo k y todos los dems, cualquier cambio que ocurra el la matriz de peso, incurrir en un cambio en la matriz de nodos intermedios, asumiendo que localmente el nodo k es el de menor peso en esa iteracin.

D0 1 1

4 1

S0 1 1 2 1 3 1

3 3

4 4
4 4

2 3 2

1 2 3 4 4 2 9

4 1 2

Fijamos la fila 1, entonces k=1, y comenzamos a revisar el algoritmo preguntando si MatrizdePeso[i][k]+MatrizdePeso[k][j]< MatrizdePeso[i][j], si es menor se cambia si no se mantiene. As obtenemos D1 y S1.

D1 1 1

4 1

S1 1 1

4 4
4 1

2 3

1 2 3 4 12 4 2 9

2 1 3 1

3
1

4 1 2

Como se puede ver en las posiciones 3,2 y 3,4 de la matriz de peso, hubo cambios y como habamos fijado k =1, entonces en las mismas posiciones se generarn cambios en la matriz de nodos intermedios. Ahora fijamos k =2 y seguimos con el procedimiento hasta llegar a k =4, que es el nmero total de nodos en el grafo.

D1 1

4 1
5

S1 1 1 2 1 3 1

3 3

4 4
4 1

8 1 1 2 3 4 12 4 2 9

2 3 1

4 1 2

D2 1

4 1
5

S2 1 1 2 1 3 1

3 3

4 4
4 1

8 9 1 1 2 3 4 12 4 2 3

2 2 1

4 1 2

Como vemos en las posiciones 1,3 y 4,3 de la matriz de peso, hubo cambios y como habamos fijado k =2, entonces en las mismas posiciones se generarn cambios en la matriz de nodos intermedios. Ahora fijamos k =3 y seguimos con el procedimiento hasta llegar a k =4, que es el nmero total de nodos en el grafo.

D2 1

4 1
5

S2 1 1 2 1 3 1

3 3

4 4
4 1

8 9 1 1 2 3 4 12 4 2 3

2 2 1

4 1 2

D3 1 1 2 5 3 4 4 7

3 1

4 1
6 5

S3 1 1 2 3 3 1

3 3

4 4
3 1

8 9 12

2 2 1

2 3

4 3 2

Como vemos en las posiciones 2,1 ; 2,4 y 4,1 de la matriz de peso, hubo cambios y como habamos fijado k =3, entonces en las mismas posiciones se generarn cambios en la matriz de nodos intermedios. Ahora fijamos k =4 y seguimos con el procedimiento hasta llegar a k =4, que es el nmero total de nodos en el grafo.

D3 1
1 2 5 3 4 4 7

3
1

4
1
6 5

S3 1
1 2 3 3 1

3
3

4
4
3 1

8 9 12

2 2 1

2 3

4 3 2

D4 1 1 2 5 3 4 4 7

3 1

4 1
6 5

S4 1 1 2 3 3 1

3 3

4 4
3 1

3 4 7

4 4 4

2 3

4 3 2

Como vemos en las posiciones 1,2; 1,3 y 3,2 de la matriz de peso, hubo cambios y como habamos fijado k =4, entonces en las mismas posiciones se generarn cambios en la matriz de nodos intermedios, y como ya completamos las 4 iteraciones, estas son las matrices con los pesos ptimos y sus respectivos caminos.

La gracia del algoritmo de Floyd y Warshall radica en que trabaja con programacin dinmica, lo que garantiza que la solucin entregada por este algoritmo sea ptima.

Potrebbero piacerti anche