El algoritmo de Floyd-Warshall es otro algoritmo que sirve para determinar el camino más corto entre cualesquiera dos nodos de un grafo conexo, dirigido y ponderado dado.
Veamos un ejemplo con el siguiente grafo.
Paso 1
Se crean dos matrices (tablas) cuadradas con tantas filas y columnas como nodos tiene el grafo. Cada fila y cada columna se corresponderá con un nodo del grafo.
Una será la matriz ponderada, P, y la otra será la matriz de recorridos, R.
En cada elemento de la matriz P escribimos los pesos de cada arista que une un nodo de una fila con un nodo de una columna. Cuando no existe relación entre dos nodos su peso será infinito.
Hay que tener en cuenta si el grafo es dirigido o no, de manera que puede ocurrir que la distancia de un nodo A a otro B sea una cantidad finita y la distancia de B a A sea infinito porque no se pueda recorrer la arista AB en el sentido de B a A.
La diagonal de esta matriz siempre será nula puesto que la distancia de un nodo a sí mismo es 0, la tabla P quedaría así:
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
\(\infty\) |
2 |
\(\infty\) |
D |
\(\infty\) |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
Cada elemento de la matriz R se rellena con el nombre del nodo de su columna correspondiente, la tabla R quedaría así.
V. |
A |
B |
C |
D |
E |
F |
G |
A |
A |
B |
C |
D |
E |
F |
G |
B |
A |
B |
C |
D |
E |
F |
G |
C |
A |
B |
C |
D |
E |
F |
G |
D |
A |
B |
C |
D |
E |
F |
G |
E |
A |
B |
C |
D |
E |
F |
G |
F |
A |
B |
C |
D |
E |
F |
G |
G |
A |
B |
C |
D |
E |
F |
G |
Paso 2. Nodo A
Nos situamos en el nodo A, es decir en la primera fila y en la primera columna de la matriz P.
En la primera columna buscamos el primer elemento no nulo ni infinito (marcado en rojo)
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
\(\infty\) |
2 |
\(\infty\) |
D |
\(\infty\) |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
Sumamos ese valor a cada uno de los elementos de la primera fila y el resultado lo comparamos con los elementos correspondientes de la fila a la que pertenece el elemento no nulo ni infinito en el que nos hemos parado (en este caso los elementos de la fila 2) y la columna del elemento de la primera fila con el que estemos sumando. Si el valor resultante es menor que el elemento que hay en la fila y la columna correspondiente, sustituimos ese elemento por el nuevo valor.
En la matriz R cambiamos el elemento que se corresponde con el elemento cambiado en la matriz P por el nombre del nodo en el que estemos situados. En este caso el nodo A.
En este caso no cambia ningún elemento ni en P ni en R.
Paso 3. Nodo B
Pasamos al siguiente elemento no nulo ni infinito de la primera columna, marcado en rojo:
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
\(\infty\) |
2 |
\(\infty\) |
D |
\(\infty\) |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
Tampoco cambia ningún elemento, así que pasamos al nodo B, es decir a la segunda fila y la segunda columna:
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
\(\infty\) |
2 |
\(\infty\) |
D |
\(\infty\) |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
En la segunda columna buscamos el primer elemento no nulo ni infinito, marcado en rojo.
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
\(\infty\) |
2 |
\(\infty\) |
D |
\(\infty\) |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
2+2< \(\infty\), así que cambiamos \(\infty\) por 4 en la matriz de P y la D de la fila 1 y la columna 4 de R, por B, puesto que estamos en el nodo B.
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
\(\infty\) |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
\(\infty\) |
2 |
\(\infty\) |
D |
\(\infty\) |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
V |
A |
B |
C |
D |
E |
F |
G |
A |
A |
B |
C |
B |
E |
F |
G |
B |
A |
B |
C |
D |
E |
F |
G |
C |
A |
B |
C |
D |
E |
F |
G |
D |
A |
B |
C |
D |
E |
F |
G |
E |
A |
B |
C |
D |
E |
F |
G |
F |
A |
B |
C |
D |
E |
F |
G |
G |
A |
B |
C |
D |
E |
F |
G |
2+1<\(\infty\), así que cambiamos \(\infty\) por 3 en la matriz de P y la E de la fila 1 y la columna 5 de R, por B, puesto que estamos en el nodo B.
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
\(\infty\) |
2 |
\(\infty\) |
D |
\(\infty\) |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
V. |
A |
B |
C |
D |
E |
F |
G |
A |
A |
B |
C |
B |
B |
F |
G |
B |
A |
B |
C |
D |
E |
F |
G |
C |
A |
B |
C |
D |
E |
F |
G |
D |
A |
B |
C |
D |
E |
F |
G |
E |
A |
B |
C |
D |
E |
F |
G |
F |
A |
B |
C |
D |
E |
F |
G |
G |
A |
B |
C |
D |
E |
F |
G |
Con este elemento ya no se puede realizar más cambios, pasamos al siguiente elemento no nulo ni infinito de la segunda columna, marcado en rojo:
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
\(\infty\) |
2 |
\(\infty\) |
D |
\(\infty\) |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
5+1<\(\infty\), así que cambiamos \(\infty\) por 6 en la matriz de P y la E de la fila 3 y la columna 5 de R, por B, puesto que seguimos en el nodo B.
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
\(\infty\) |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
V |
A |
B |
C |
D |
E |
F |
G |
A |
A |
B |
C |
B |
B |
F |
G |
B |
A |
B |
C |
D |
E |
F |
G |
C |
A |
B |
C |
D |
B |
F |
G |
D |
A |
B |
C |
D |
E |
F |
G |
E |
A |
B |
C |
D |
E |
F |
G |
F |
A |
B |
C |
D |
E |
F |
G |
G |
A |
B |
C |
D |
E |
F |
G |
Con este elemento ya no se puede realizar más cambios, pasamos al siguiente elemento no nulo ni infinito de la segunda columna, marcado en rojo:
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
\(\infty\) |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
2+2<\(\infty\), así que cambiamos \(\infty\) por 4 en la matriz de P y la A de la fila 4 y la columna 1 de R, por B, puesto que seguimos en el nodo B.
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
V |
A |
B |
C |
D |
E |
F |
G |
A |
A |
B |
C |
B |
B |
F |
G |
B |
A |
B |
C |
D |
E |
F |
G |
C |
A |
B |
C |
D |
B |
F |
G |
D |
B |
B |
C |
D |
E |
F |
G |
E |
A |
B |
C |
D |
E |
F |
G |
F |
A |
B |
C |
D |
E |
F |
G |
G |
A |
B |
C |
D |
E |
F |
G |
Con este elemento ya no se puede realizar más cambios, así que pasamos al siguiente elemento no nulo ni infinito de la segunda columna, marcado en rojo:
Vért |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
\(\infty\) |
1 |
\(\infty\) |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
1+2<\(\infty\), así que cambiamos \(\infty\) por 3 en la matriz de P y la A de la fila 5 y la columna 1 de R, por B, puesto que seguimos en el nodo B.
1+5<\(\infty\), así que cambiamos \(\infty\) por 6 en la matriz de P y la C de la fila 5 y la columna 3 de R, por B, puesto que seguimos en el nodo B.
Vért |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
3 |
1 |
6 |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
V |
A |
B |
C |
D |
E |
F |
G |
A |
A |
B |
C |
B |
B |
F |
G |
B |
A |
B |
C |
D |
E |
F |
G |
C |
A |
B |
C |
D |
B |
F |
G |
D |
B |
B |
C |
D |
E |
F |
G |
E |
B |
B |
B |
D |
E |
F |
G |
F |
A |
B |
C |
D |
E |
F |
G |
G |
A |
B |
C |
D |
E |
F |
G |
Paso 4. Nodo C
Pasamos al nodo C, es decir a la tercera fila y la tercera columna:
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
3 |
1 |
6 |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
En la tercera columna buscamos el primer elemento no nulo ni infinito, marcado en rojo.
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
\(\infty\) |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
3 |
1 |
6 |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
3+2<\(\infty\), así que cambiamos \(\infty\) por 5 en la matriz de P y la C de la fila 1 y la columna 6 de R, por C, puesto que estamos en el nodo C.
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
5 |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
3 |
1 |
6 |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
V |
A |
B |
C |
D |
E |
F |
G |
A |
A |
B |
C |
B |
B |
C |
G |
B |
A |
B |
C |
D |
E |
F |
G |
C |
A |
B |
C |
D |
B |
F |
G |
D |
B |
B |
C |
D |
E |
F |
G |
E |
B |
B |
B |
D |
E |
F |
G |
F |
A |
B |
C |
D |
E |
F |
G |
G |
A |
B |
C |
D |
E |
F |
G |
Con este elemento ya no se puede realizar más cambios, así que pasamos al siguiente elemento no nulo ni infinito de la tercera columna, marcado en rojo:
V. |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
5 |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
\(\infty\) |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
3 |
1 |
6 |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
5+2<\(\infty\), así que cambiamos \(\infty\) por 7 en la matriz de P y la C de la fila 2 y la columna 6 de R, por C, puesto que seguimos en el nodo C.
Vért |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
5 |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
7 |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
3 |
1 |
6 |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
V |
A |
B |
C |
D |
E |
F |
G |
A |
A |
B |
C |
B |
B |
C |
G |
B |
A |
B |
C |
D |
E |
C |
G |
C |
A |
B |
C |
D |
B |
F |
G |
D |
B |
B |
C |
D |
E |
F |
G |
E |
B |
B |
B |
D |
E |
F |
G |
F |
A |
B |
C |
D |
E |
F |
G |
G |
A |
B |
C |
D |
E |
F |
G |
Con este elemento ya no se puede realizar más cambios, así que pasamos al siguiente elemento no nulo ni infinito de la tercera columna, marcado en rojo:
Vért |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
5 |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
7 |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
3 |
1 |
6 |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
Con este elemento no se puede realizar cambios, así que pasamos al siguiente elemento no nulo ni infinito de la tercera columna, marcado en naranja:
Vért |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
5 |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
7 |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
3 |
1 |
6 |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
Con este elemento tampoco se puede realizar cambios así que pasamos al siguiente elemento no nulo ni infinito de la tercera columna, marcado en rojo:
Vért |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
5 |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
7 |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
3 |
1 |
6 |
3 |
0 |
3 |
5 |
F |
\(\infty\) |
\(\infty\) |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
2+3<\(\infty\), así que cambiamos \(\infty\) por 5 en la matriz de P y la A de la fila 6 y la columna 1 de R, por C, puesto que seguimos en el nodo C.
2+5<\(\infty\), así que cambiamos \(\infty\) por 7 en la matriz de P y la B de la fila 6 y la columna 2 de R, por C, puesto que seguimos en el nodo C.
Vért |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
5 |
\(\infty\) |
B |
2 |
0 |
5 |
2 |
1 |
7 |
\(\infty\) |
C |
3 |
5 |
0 |
4 |
6 |
2 |
\(\infty\) |
D |
4 |
2 |
4 |
0 |
3 |
1 |
\(\infty\) |
E |
3 |
1 |
6 |
3 |
0 |
3 |
5 |
F |
5 |
7 |
2 |
1 |
3 |
0 |
2 |
G |
\(\infty\) |
\(\infty\) |
\(\infty\) |
\(\infty\) |
5 |
2 |
0 |
V |
A |
B |
C |
D |
E |
F |
G |
A |
A |
B |
C |
B |
B |
C |
G |
B |
A |
B |
C |
D |
E |
C |
G |
C |
A |
B |
C |
D |
B |
F |
G |
D |
B |
B |
C |
D |
E |
F |
G |
E |
B |
B |
B |
D |
E |
F |
G |
F |
C |
C |
C |
D |
E |
F |
G |
G |
A |
B |
C |
D |
E |
F |
G |
Paso 5. Así sucesivamente hasta el último nodo
De igual manera procedemos con el resto de vértices, D, E, F, G.
Resultado
Con este elemento no se puede realizar cambios y hemos terminado de aplicar el algoritmo. Las matrices finales son:
Vért |
A |
B |
C |
D |
E |
F |
G |
A |
0 |
2 |
3 |
4 |
3 |
5 |
7 |
B |
2 |
0 |
5 |
2 |
1 |
3 |
5 |
C |
3 |
5 |
0 |
3 |
5 |
2 |
4 |
D |
4 |
2 |
3 |
0 |
3 |
1 |
3 |
E |
3 |
1 |
5 |
3 |
0 |
3 |
5 |
F |
5 |
3 |
2 |
1 |
3 |
0 |
2 |
G |
7 |
5 |
4 |
3 |
5 |
2 |
0 |
V |
A |
B |
C |
D |
E |
F |
G |
A |
A |
B |
C |
B |
B |
C |
F |
B |
A |
B |
C |
D |
E |
D |
F |
C |
A |
B |
C |
F |
F |
F |
F |
D |
B |
B |
F |
D |
E |
F |
F |
E |
B |
B |
F |
D |
E |
F |
G |
F |
C |
D |
C |
D |
E |
F |
G |
G |
F |
F |
F |
F |
E |
F |
G |
Si queremos ir de A a G, la matriz de pesos nos dice que la distancia es 7 y la de recorridos nos dice que tenemos que hacerlo pasando por F.
Para ir de A a F, la matriz de pesos nos dice que la distancia es 5 y la matriz de recorridos nos dice que tenemos que hacerlo pasando por C.
Si queremos ir de B a G, la matriz de pesos nos dice que la distancia es 5 y la matriz de recorridos nos dice que tenemos que hacerlo pasando por
F. Para ir de B a F, la matriz de pesos nos dice que la distancia es 3 y la matriz de recorridos nos dice que tenemos que hacerlo pasando por D.
Si queremos representar en el grafo el camino más corto para ir desde A hasta cualquier nodo del grafo (lo que obtenemos con el algoritmo de Dijkstra) tenemos que representar los resultados obtenidos en la primera fila de las dos matrices:
- AB: 2
- AC: 3
- AD: 4, pasando por B
- AE: 3, pasando por B
- AF: 5, pasando por C
- AG: 7, pasando por F