Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FloydWarshall PDF
FloydWarshall PDF
Warshall
Informtica - Hoja de Ejercicios 7
Objetivo
Dado un grafo ponderado, queremos obtener el
camino de distancia mnima entre dos vrtices
cualesquiera.
0 1 2 3 4
1 0
5
3
1
3
0 6 2
7 4
4 3
8
4
2
Objetivo
Dado un grafo ponderado, queremos obtener el
camino de distancia mnima entre dos vrtices
cualesquiera.
0 1 2 3 4
1 0 8
5
3
1
3
0 6 2
7 4
4 3
8
4
2
Objetivo
Dado un grafo ponderado, queremos obtener el
camino de distancia mnima entre dos vrtices
cualesquiera.
0 1 2 3 4
1 0 8 14
5
3
1
3
0 6 2
7 4
4 3
8
4
2
Objetivo
Dado un grafo ponderado, queremos obtener el
camino de distancia mnima entre dos vrtices
cualesquiera.
0 1 2 3 4
1 0 0 3 7 8 14
5
3
1 3 0 9 5 11
3
0 6 2 7 9 0 4 8
7 4
4 3 8 5 4 0 6
8
4 14 11 8 6 0
2
Representacin de un grafo
Matriz de adyacencia, con los pesos de cada
arista. Si no hay arista entre dos vrtices
determinados, se considera +
0 1 2 3 4
1 0 0 3 7 + +
5
3 1 3 0 + 5 +
3
0 6
2 7 + 0 4 8
7 4 3 + 5 4 0 6
4
8 4 + + 8 6 0
2
Representacin de un grafo
Matriz de adyacencia, con los pesos de cada
arista. Si no hay arista entre dos vrtices
determinados, se considera +
0 1 2 3 4
1 0 0 3 7 + +
5
3 1 3 0 + 5 +
3
0 6
2 7 + 0 4 8
7 4 3 + 5 4 0 6
4
8 4 + + 8 6 0
2
0 1 2 3 4
0 0 3 7 + +
1 3 0 + 5 +
2 7 + 0 4 8
3 + 5 4 0 6
4 + + 8 6 0
[[3],[7,inf],[inf,5,4],[inf,inf,8,6]]
1 2 3 4
Representacin de un grafo
class MatrizCiudades:
def __init__(self, numeroCiudades):
....
def elemento(self, i, j):
....
def cambiaElemento(self, i, j, n):
....
def numeroCiudades(self):
return len(self.matriz)
Clculo del camino mnimo
Supongamos que tenemos n ciudades,
numeradas desde 0 hasta n-1.
Construimos una sucesin de matrices:
A0 -> A1 -> A2 -> ... -> An
1
5
3
3
0 6
A2(0, 3) = 8
2 4
4
A2(0, 4) = +
8
2
Clculo del camino mnimo
A0(i, j) = Longitud del camino mnimo que hay desde la
ciudad i hasta la ciudad j, suponiendo no podemos pasar
por ninguna ciudad intermedia.
1 0 1 2 3 4
5
3 0 0 3 7 + +
3 3 0 + 5 +
1
0 6
7 4 2 7 + 0 4 8
4
3 + 5 4 0 6
8
2 + + 8 6 0
4
8 3 8 5 4 0 6
2
4 14 11 8 6 0
An es lo que buscamos !
Clculo del camino mnimo
Cmo calcular Ak a partir de Ak-1?
Ak-1(i,j)
i j
Ak-1(k-1, j)
Ak-1(i, k-1) k-1
Clculo del camino mnimo
Cmo calcular Ak a partir de Ak-1?
Ak-1(i,j)
i j
Ak-1(k-1, j)
Ak-1(i, k-1) k-1
Clculo del camino mnimo
Cmo calcular Ak a partir de Ak-1?
Ak-1(i,j)
i j
k-1
i j
Ak-1(k-1, j)
Ak-1(i, k-1) k-1
Ak-1(i,j)
i j
Ak-1(k-1, j)
Ak-1(i, k-1) k-1