Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ......

243
Algoritmos para recorrido de grafos Problemas de camino m´ ınimo Algoritmos para determinar Caminos M´ ınimos en Grafos Algoritmos y Estructuras de Datos III Flavia Bonomo, DC, FCEN, UBA, 2C 2015

Transcript of Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ......

Page 1: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmos para determinar Caminos Mınimos enGrafos

Algoritmos y Estructuras de Datos III

Flavia Bonomo, DC, FCEN, UBA, 2C 2015

Page 2: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Algoritmos para recorrido de grafos

Descripcion del problema a grandes rasgos:

Tengo un grafo descripto de cierta forma y quiero recorrer susvertices para:

encontrar un vertice que cumpla determinada propiedad.

calcular una propiedad de los vertices, por ejemplo la distanciaa un vertice dado.

calcular una propiedad del grafo, por ejemplo suscomponentes conexas.

obtener un orden de los vertices que cumpla determinadapropiedad.

Page 3: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Estructuras de datos

Una pila (stack) es una estructura de datosdonde el ultimo en entrar es el primero en salir.Las tres operaciones basicas de una pila son:

apilar (push), que coloca un objeto en laparte superior de la pila,

tope (top) que permite ver el objetosuperior de la pila y

desapilar (pop), que elimina de la pila eltope.

Page 4: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Estructuras de datos

Una cola (queue) es una estructura de datos donde el primero enllegar es el primero en salir.Las tres operaciones basicas de una cola son:

encolar (push), que coloca un objeto al final de la cola,

primero (first) que permite ver el primer objeto de la cola y

desencolar (pop), que elimina de la cola el primer objeto.

Page 5: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS

BFS: Breadth-First Search, o sea, recorrido a lo ancho. A partir deun vertice, recorre sus vecinos, luego los vecinos de sus vecinos, yası sucesivamente.... si al finalizar quedan vertices sin visitar, serepite a partir de un vertice no visitado.

Ejemplo:

Page 6: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS

BFS: Breadth-First Search, o sea, recorrido a lo ancho. A partir deun vertice, recorre sus vecinos, luego los vecinos de sus vecinos, yası sucesivamente.... si al finalizar quedan vertices sin visitar, serepite a partir de un vertice no visitado.

Ejemplo:

1

Page 7: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS

BFS: Breadth-First Search, o sea, recorrido a lo ancho. A partir deun vertice, recorre sus vecinos, luego los vecinos de sus vecinos, yası sucesivamente.... si al finalizar quedan vertices sin visitar, serepite a partir de un vertice no visitado.

Ejemplo:

1

2

3

4

Page 8: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS

BFS: Breadth-First Search, o sea, recorrido a lo ancho. A partir deun vertice, recorre sus vecinos, luego los vecinos de sus vecinos, yası sucesivamente.... si al finalizar quedan vertices sin visitar, serepite a partir de un vertice no visitado.

Ejemplo:

1

2

3

4

5

Page 9: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS

BFS: Breadth-First Search, o sea, recorrido a lo ancho. A partir deun vertice, recorre sus vecinos, luego los vecinos de sus vecinos, yası sucesivamente.... si al finalizar quedan vertices sin visitar, serepite a partir de un vertice no visitado.

Ejemplo:

1

2

3

4

5

6

Page 10: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS

BFS: Breadth-First Search, o sea, recorrido a lo ancho. A partir deun vertice, recorre sus vecinos, luego los vecinos de sus vecinos, yası sucesivamente.... si al finalizar quedan vertices sin visitar, serepite a partir de un vertice no visitado.

Ejemplo:

1

2

3

4

5

6

7

8

Page 11: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS

BFS: Breadth-First Search, o sea, recorrido a lo ancho. A partir deun vertice, recorre sus vecinos, luego los vecinos de sus vecinos, yası sucesivamente.... si al finalizar quedan vertices sin visitar, serepite a partir de un vertice no visitado.

Ejemplo:

1

2

3

4

5

6

7

8

9

Page 12: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS

BFS: Breadth-First Search, o sea, recorrido a lo ancho. A partir deun vertice, recorre sus vecinos, luego los vecinos de sus vecinos, yası sucesivamente.... si al finalizar quedan vertices sin visitar, serepite a partir de un vertice no visitado.

Ejemplo:

1

2

3

4

5

6

7

8

910

Page 13: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS

BFS: Breadth-First Search, o sea, recorrido a lo ancho. A partir deun vertice, recorre sus vecinos, luego los vecinos de sus vecinos, yası sucesivamente.... si al finalizar quedan vertices sin visitar, serepite a partir de un vertice no visitado.

Ejemplo:

1

2

3

4

5

6

7

8

910

11

Page 14: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

2

9 10

11

Page 15: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

2 3 4567

89 10

11

Page 16: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2 3 4567

89 10

11

Page 17: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2 3 457

9 10

11

Page 18: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

22 3 4

57

9 10

11

Page 19: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

22 3 4

567

89 10

11

Page 20: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

2 3 4567

89 10

11

Page 21: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

2 3 4567

89 10

11

Page 22: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

2 3 4567

89 10

11

Page 23: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

2 4567

89 10

11

Page 24: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

2 4567

89 10

11

Page 25: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

2 4567

89 10

11

Page 26: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

2 4567

89 10

11

Page 27: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

2 456

89 10

11

Page 28: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

2 456

89 10

11

Page 29: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

2 456

89 10

11

Page 30: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

8

2 456

89 10

11

Page 31: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

8

2

9 10

11

Page 32: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

8

2

10

11

Page 33: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

8

9

2

10

11

Page 34: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

8

9

2

11

Page 35: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

8

9102

11

Page 36: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

8

9102

Page 37: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

8

910

11

2

Page 38: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: pseudocodigo

cola C; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;C.vaciar();C.encolar(v);Mientras C no sea vacıa

w = C.primero();ord++;orden(w)=ord;C.desencolar();Para cada vecino z de w

Si z no esta visitadomarcar z;C.encolar(z);

1

2

3

4

5

6

7

8

910

11

2

9 10

11

Page 39: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: propiedades

Notemos que cada vez que comenzamos desde un vertice nuevo, esporque los vertices que quedan sin visitar no son alcanzables desdelos vertices visitados. Entonces lo que estamos encontrando son lasdiferentes componentes conexas del grafo.

Si ponemos un contador que se incremente luego de la operacionelegir un vertice no visitado, lo que obtenemos es la cantidad decomponentes conexas del grafo (y con algunas leves modificacionespodemos obtener las componentes en si).

Page 40: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: propiedadesSi partimos desde un vertice v , modificando levemente el codigopodemos calcular para cada vertice su distancia a v .

Inicialmentetodos los vertices tienen rotulo ∞. Rotulamos el vertice v con 0 yluego, al visitar los vecinos de cada vertice w que aun tienen rotulo∞, los rotulamos con el rotulo de w mas 1. (Notemos que los queno sean alcanzados desde v , o sea, no pertenecen a la componenteconexa de v , tienen distancia infinita a v .)

Ejemplo:

Page 41: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: propiedadesSi partimos desde un vertice v , modificando levemente el codigopodemos calcular para cada vertice su distancia a v . Inicialmentetodos los vertices tienen rotulo ∞. Rotulamos el vertice v con 0 yluego, al visitar los vecinos de cada vertice w que aun tienen rotulo∞, los rotulamos con el rotulo de w mas 1. (Notemos que los queno sean alcanzados desde v , o sea, no pertenecen a la componenteconexa de v , tienen distancia infinita a v .)

Ejemplo:

Page 42: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: propiedadesSi partimos desde un vertice v , modificando levemente el codigopodemos calcular para cada vertice su distancia a v . Inicialmentetodos los vertices tienen rotulo ∞. Rotulamos el vertice v con 0 yluego, al visitar los vecinos de cada vertice w que aun tienen rotulo∞, los rotulamos con el rotulo de w mas 1. (Notemos que los queno sean alcanzados desde v , o sea, no pertenecen a la componenteconexa de v , tienen distancia infinita a v .)

Ejemplo:

Page 43: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: propiedadesSi partimos desde un vertice v , modificando levemente el codigopodemos calcular para cada vertice su distancia a v . Inicialmentetodos los vertices tienen rotulo ∞. Rotulamos el vertice v con 0 yluego, al visitar los vecinos de cada vertice w que aun tienen rotulo∞, los rotulamos con el rotulo de w mas 1. (Notemos que los queno sean alcanzados desde v , o sea, no pertenecen a la componenteconexa de v , tienen distancia infinita a v .)

Ejemplo:

0

Page 44: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: propiedadesSi partimos desde un vertice v , modificando levemente el codigopodemos calcular para cada vertice su distancia a v . Inicialmentetodos los vertices tienen rotulo ∞. Rotulamos el vertice v con 0 yluego, al visitar los vecinos de cada vertice w que aun tienen rotulo∞, los rotulamos con el rotulo de w mas 1. (Notemos que los queno sean alcanzados desde v , o sea, no pertenecen a la componenteconexa de v , tienen distancia infinita a v .)

Ejemplo:

0

1

1

1

Page 45: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: propiedadesSi partimos desde un vertice v , modificando levemente el codigopodemos calcular para cada vertice su distancia a v . Inicialmentetodos los vertices tienen rotulo ∞. Rotulamos el vertice v con 0 yluego, al visitar los vecinos de cada vertice w que aun tienen rotulo∞, los rotulamos con el rotulo de w mas 1. (Notemos que los queno sean alcanzados desde v , o sea, no pertenecen a la componenteconexa de v , tienen distancia infinita a v .)

Ejemplo:

0

1

1

1

2

Page 46: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: propiedadesSi partimos desde un vertice v , modificando levemente el codigopodemos calcular para cada vertice su distancia a v . Inicialmentetodos los vertices tienen rotulo ∞. Rotulamos el vertice v con 0 yluego, al visitar los vecinos de cada vertice w que aun tienen rotulo∞, los rotulamos con el rotulo de w mas 1. (Notemos que los queno sean alcanzados desde v , o sea, no pertenecen a la componenteconexa de v , tienen distancia infinita a v .)

Ejemplo:

0

1

1

1

2

2

Page 47: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: propiedadesSi partimos desde un vertice v , modificando levemente el codigopodemos calcular para cada vertice su distancia a v . Inicialmentetodos los vertices tienen rotulo ∞. Rotulamos el vertice v con 0 yluego, al visitar los vecinos de cada vertice w que aun tienen rotulo∞, los rotulamos con el rotulo de w mas 1. (Notemos que los queno sean alcanzados desde v , o sea, no pertenecen a la componenteconexa de v , tienen distancia infinita a v .)

Ejemplo:

0

1

1

1

2

2 3

3

Page 48: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: reconocimiento de grafos bipartitosUtilizamos una idea parecida a la del algoritmo anterior en cadacomponente conexa: rotulamos el vertice v con 0 y luego, al visitarlos vecinos de cada vertice w que aun no tienen rotulo, losrotulamos con 1 menos el rotulo de w . De esta manera quedadeterminada la particion, de ser bipartito el grafo. Queda entoncesverificar que ningun par de vertices con el mismo rotulo seanadyacentes (ese chequeo se puede ir haciendo en cada paso).

Ejemplo:

Page 49: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: reconocimiento de grafos bipartitosUtilizamos una idea parecida a la del algoritmo anterior en cadacomponente conexa: rotulamos el vertice v con 0 y luego, al visitarlos vecinos de cada vertice w que aun no tienen rotulo, losrotulamos con 1 menos el rotulo de w . De esta manera quedadeterminada la particion, de ser bipartito el grafo. Queda entoncesverificar que ningun par de vertices con el mismo rotulo seanadyacentes (ese chequeo se puede ir haciendo en cada paso).

Ejemplo:

0

Page 50: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: reconocimiento de grafos bipartitosUtilizamos una idea parecida a la del algoritmo anterior en cadacomponente conexa: rotulamos el vertice v con 0 y luego, al visitarlos vecinos de cada vertice w que aun no tienen rotulo, losrotulamos con 1 menos el rotulo de w . De esta manera quedadeterminada la particion, de ser bipartito el grafo. Queda entoncesverificar que ningun par de vertices con el mismo rotulo seanadyacentes (ese chequeo se puede ir haciendo en cada paso).

Ejemplo:

0

1

1

1

Page 51: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido BFS: reconocimiento de grafos bipartitosUtilizamos una idea parecida a la del algoritmo anterior en cadacomponente conexa: rotulamos el vertice v con 0 y luego, al visitarlos vecinos de cada vertice w que aun no tienen rotulo, losrotulamos con 1 menos el rotulo de w . De esta manera quedadeterminada la particion, de ser bipartito el grafo. Queda entoncesverificar que ningun par de vertices con el mismo rotulo seanadyacentes (ese chequeo se puede ir haciendo en cada paso).

Ejemplo:

0

1

1

1

0

Page 52: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

Page 53: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

Page 54: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

2

Page 55: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

2 3

Page 56: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

23 4

Page 57: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

2 3 4

5

Page 58: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

2 3 4

56

Page 59: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

2 3 4

56

7

Page 60: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

2 3 4

56

7

8

Page 61: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

2 3 4

56

7

8

9

Page 62: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

2 3 4

56

7

8

910

Page 63: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFSDFS: Depth-First Search, o sea, recorrido en profundidad. A partirde un vertice, comienza por alguno de sus vecinos, luego un vecinode este, y ası sucesivamente hasta llegar a un vertice que ya notiene vecinos sin visitar. Sigue entonces por algun vecino delultimo vertice visitado que aun tiene vecinos sin visitar.Igual que en BFS, si al finalizar quedan vertices sin visitar, se repitea partir de un vertice no visitado.

Ejemplo:

1

2 3 4

56

7

8

910

11

Page 64: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

2

9 10

11

Page 65: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

2 3 4567

89 10

11

Page 66: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4567

89 10

11

Page 67: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 457

9 10

11

Page 68: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2

2 3 457

9 10

11

Page 69: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2

2 457

9 10

11

Page 70: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3

2 457

9 10

11

Page 71: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3

27

9 10

11

Page 72: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

23 4

27

9 10

11

Page 73: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

23 4

27

9 10

11

Page 74: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

5

27

9 10

11

Page 75: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

5

27

9 10

11

Page 76: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

27

9 10

11

Page 77: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

2

9 10

11

Page 78: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

2

9 10

11

Page 79: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

2

9 10

11

Page 80: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

82

9 10

11

Page 81: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

82

9 10

11

Page 82: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

82

10

11

Page 83: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

8

9

2

10

11

Page 84: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

8

9

2

11

Page 85: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

8

9102

11

Page 86: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

8

9102

Page 87: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

8

910

11

2

Page 88: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Recorrido DFS: pseudocodigo

pila P; vertices v, w; ord = 0;Mientras queden vertices sin visitar

v = elegir un vertice no visitado;marcar v;P.vaciar();P.apilar(v);Mientras P no sea vacıa

w = P.tope();ord++;orden(w)=ord;P.desapilar();Para cada vecino z de w

Si z no esta visitadomarcar z;P.apilar(z);

1

2 3 4

56

7

8

910

11

2

9 10

11

Page 89: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Propiedades

Al igual que BFS, este algoritmo puede modificarse paracalcular las componentes conexas de un grafo y/o su cantidad.

El grafo en si puede no estar totalmente almacenado, perotener una descripcion implıcita que permita generar bajodemanda los vecinos de un vertice. Un ejemplo tıpico de estecaso es cuando el grafo es el arbol de posibilidades de unproblema de busqueda exhaustiva. El recorrido DFS es el quese utiliza habitualmente para hacer backtracking, ya quepermite encontrar algunas soluciones rapido y usarlas para“podar” (es decir, no recorrer) ciertas ramas del arbol.

BFS puede ser util en ese contexto para encontrar el caminomas corto hacia la salida de un laberinto, por ejemplo, aun siel laberinto viene descripto de manera implıcita.

Page 90: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Propiedades

Al igual que BFS, este algoritmo puede modificarse paracalcular las componentes conexas de un grafo y/o su cantidad.

El grafo en si puede no estar totalmente almacenado, perotener una descripcion implıcita que permita generar bajodemanda los vecinos de un vertice. Un ejemplo tıpico de estecaso es cuando el grafo es el arbol de posibilidades de unproblema de busqueda exhaustiva. El recorrido DFS es el quese utiliza habitualmente para hacer backtracking, ya quepermite encontrar algunas soluciones rapido y usarlas para“podar” (es decir, no recorrer) ciertas ramas del arbol.

BFS puede ser util en ese contexto para encontrar el caminomas corto hacia la salida de un laberinto, por ejemplo, aun siel laberinto viene descripto de manera implıcita.

Page 91: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Propiedades

Al igual que BFS, este algoritmo puede modificarse paracalcular las componentes conexas de un grafo y/o su cantidad.

El grafo en si puede no estar totalmente almacenado, perotener una descripcion implıcita que permita generar bajodemanda los vecinos de un vertice. Un ejemplo tıpico de estecaso es cuando el grafo es el arbol de posibilidades de unproblema de busqueda exhaustiva. El recorrido DFS es el quese utiliza habitualmente para hacer backtracking, ya quepermite encontrar algunas soluciones rapido y usarlas para“podar” (es decir, no recorrer) ciertas ramas del arbol.

BFS puede ser util en ese contexto para encontrar el caminomas corto hacia la salida de un laberinto, por ejemplo, aun siel laberinto viene descripto de manera implıcita.

Page 92: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Estructuras de datos y complejidad

Para estos algoritmos conviene en general tener el grafo dadopor listas de adyacencia.

De esta manera, el Para cada vecino z de w puede serrealizado en orden O(d(w)).

Con lo cual, si el marcar, asignar orden y las operaciones decola y pila se realizan en orden constante, la complejidad totalsera de O(n + m), para un grafo de n vertices y m aristas. Eln viene del recorrido secuencial que va identificando si quedanvertices no marcados.

Si en cambio el grafo esta dado por matriz de adyacencia, lacomplejidad sera O(n2), porque buscar los vecinos cuestaO(n).

Page 93: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Estructuras de datos y complejidad

Para estos algoritmos conviene en general tener el grafo dadopor listas de adyacencia.

De esta manera, el Para cada vecino z de w puede serrealizado en orden O(d(w)).

Con lo cual, si el marcar, asignar orden y las operaciones decola y pila se realizan en orden constante, la complejidad totalsera de O(n + m), para un grafo de n vertices y m aristas. Eln viene del recorrido secuencial que va identificando si quedanvertices no marcados.

Si en cambio el grafo esta dado por matriz de adyacencia, lacomplejidad sera O(n2), porque buscar los vecinos cuestaO(n).

Page 94: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Estructuras de datos y complejidad

Para estos algoritmos conviene en general tener el grafo dadopor listas de adyacencia.

De esta manera, el Para cada vecino z de w puede serrealizado en orden O(d(w)).

Con lo cual, si el marcar, asignar orden y las operaciones decola y pila se realizan en orden constante, la complejidad totalsera de O(n + m), para un grafo de n vertices y m aristas. Eln viene del recorrido secuencial que va identificando si quedanvertices no marcados.

Si en cambio el grafo esta dado por matriz de adyacencia, lacomplejidad sera O(n2), porque buscar los vecinos cuestaO(n).

Page 95: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Estructuras de datosBFSDFS

Estructuras de datos y complejidad

Para estos algoritmos conviene en general tener el grafo dadopor listas de adyacencia.

De esta manera, el Para cada vecino z de w puede serrealizado en orden O(d(w)).

Con lo cual, si el marcar, asignar orden y las operaciones decola y pila se realizan en orden constante, la complejidad totalsera de O(n + m), para un grafo de n vertices y m aristas. Eln viene del recorrido secuencial que va identificando si quedanvertices no marcados.

Si en cambio el grafo esta dado por matriz de adyacencia, lacomplejidad sera O(n2), porque buscar los vecinos cuestaO(n).

Page 96: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Problemas de camino mınimo

Dado un grafo orientado G = (V ,E ) con longitudes asociadasa sus aristas (` : E → R), la longitud (o peso o costo) de uncamino es la suma de las longitudes de sus aristas.

-1

12 3

4

5

6

7

1 13

7

7

452

6

En el digrafo de la figura, la longitud del camino es 7.

El problema del camino mınimo consiste en encontrar elcamino de menor longitud...

de un vertice a otrode un vertice a todos los demasentre todos los pares de vertices.

Page 97: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Problemas de camino mınimo

La distancia de v a w , d(v ,w), es la longitud de un caminomınimo entre v y w , +∞ si no existe ningun camino de v aw , y −∞ si existen caminos de v a w pero no uno mınimo.

Observemos que en un grafo orientado no siempre valed(v ,w) = d(w , v).

Ej:

12 3

4

5

6

7

1

-1

13

77

452

6

3

En el digrafo de la figura, d(7, 4) = −1 y d(4, 7) = 2.

Page 98: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Problemas de camino mınimo

Si G tiene un ciclo orientado de longitud negativa, no va aexistir camino mınimo entre algunos pares de vertices, esdecir, va a haber vertices a distancia −∞.

v wa bc

Si G no tiene ciclos orientados de longitud negativa (aunquepueda tener aristas de longitud negativa), para todo camino Pexiste P ′ simple con `(P ′) ≤ `(P). Como la cantidad decaminos simples en un grafo finito es finita, si existe uncamino entre v y w , existe uno mınimo.

Page 99: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Problemas de camino mınimo

Si G es no orientado, el problema de camino mınimo en G vaa ser el mismo que en el digrafo que se obtiene reemplazandocada arista por dos orientadas una para cada lado y con lamisma longitud que la original. En ese caso, aristas delongitud negativa implicarıan ciclos negativos.

1

1

13

2

2

44

56

Page 100: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Problemas de camino mınimo

Si G es no orientado, el problema de camino mınimo en G vaa ser el mismo que en el digrafo que se obtiene reemplazandocada arista por dos orientadas una para cada lado y con lamisma longitud que la original. En ese caso, aristas delongitud negativa implicarıan ciclos negativos.

1

1

13

2

2

44

56

Page 101: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Problemas de camino mınimo

Principio de optimalidad

Todo subcamino de un camino mınimo es un camino mınimo.

Demo: Sea P un camino mınimo entre s y t y sea P1 unsubcamino de P, con extremos v y w . Si existe un camino P ′1 enG entre v y w tal que `(P ′1) < `(P) entonces reemplazando P1 porP ′1 en P, obtendrıamos un camino entre s y t de longitud menorque la de P, absurdo. 2

Page 102: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Arbol de caminos mınimos

Propiedad

Si G no tiene aristas de costo negativo y s es un vertice de G tal quepara todo v ∈ V (G ) existe un camino de s a v , entonces existe un arbolorientado T con raız s tal que para todo v ∈ V (G ), el camino de s a ven T es un camino mınimo de s a v en G .

Demo: Por induccion. Si V (G ) = {s}, vale. Si |V (G )| ≥ 2, para cada x ,sea Px un camino mınimo de s a x con cantidad de aristas mınima. Seav tal que para todo v ′ ∈ V (G ), d(s, v ′) ≤ d(s, v). Ante empates en ladistancia, Pv es el que tiene mas aristas. Como no hay aristas de costonegativo y por la forma de elegir v y Px , para todo v ′, v no pertenece aPv ′ . Por lo tanto, en G − v existen caminos de s a todos los vertices.Por hipotesis inductiva, existe T ′ arbol de caminos mınimos de G − v .Sea w el anteultimo vertice en Pv . Entonces d(s, v) = d(s,w) + `(wv).Luego, agregando a T ′ el vertice v y la arista wv obtenemos un arbol decaminos mınimos de G . 2

Page 103: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Arbol de caminos mınimos

Propiedad

Si G no tiene aristas de costo negativo y s es un vertice de G tal quepara todo v ∈ V (G ) existe un camino de s a v , entonces existe un arbolorientado T con raız s tal que para todo v ∈ V (G ), el camino de s a ven T es un camino mınimo de s a v en G .

Demo: Por induccion. Si V (G ) = {s}, vale. Si |V (G )| ≥ 2, para cada x ,sea Px un camino mınimo de s a x con cantidad de aristas mınima. Seav tal que para todo v ′ ∈ V (G ), d(s, v ′) ≤ d(s, v). Ante empates en ladistancia, Pv es el que tiene mas aristas.

Como no hay aristas de costonegativo y por la forma de elegir v y Px , para todo v ′, v no pertenece aPv ′ . Por lo tanto, en G − v existen caminos de s a todos los vertices.Por hipotesis inductiva, existe T ′ arbol de caminos mınimos de G − v .Sea w el anteultimo vertice en Pv . Entonces d(s, v) = d(s,w) + `(wv).Luego, agregando a T ′ el vertice v y la arista wv obtenemos un arbol decaminos mınimos de G . 2

Page 104: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Arbol de caminos mınimos

Propiedad

Si G no tiene aristas de costo negativo y s es un vertice de G tal quepara todo v ∈ V (G ) existe un camino de s a v , entonces existe un arbolorientado T con raız s tal que para todo v ∈ V (G ), el camino de s a ven T es un camino mınimo de s a v en G .

Demo: Por induccion. Si V (G ) = {s}, vale. Si |V (G )| ≥ 2, para cada x ,sea Px un camino mınimo de s a x con cantidad de aristas mınima. Seav tal que para todo v ′ ∈ V (G ), d(s, v ′) ≤ d(s, v). Ante empates en ladistancia, Pv es el que tiene mas aristas. Como no hay aristas de costonegativo y por la forma de elegir v y Px , para todo v ′, v no pertenece aPv ′ .

Por lo tanto, en G − v existen caminos de s a todos los vertices.Por hipotesis inductiva, existe T ′ arbol de caminos mınimos de G − v .Sea w el anteultimo vertice en Pv . Entonces d(s, v) = d(s,w) + `(wv).Luego, agregando a T ′ el vertice v y la arista wv obtenemos un arbol decaminos mınimos de G . 2

Page 105: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Arbol de caminos mınimos

Propiedad

Si G no tiene aristas de costo negativo y s es un vertice de G tal quepara todo v ∈ V (G ) existe un camino de s a v , entonces existe un arbolorientado T con raız s tal que para todo v ∈ V (G ), el camino de s a ven T es un camino mınimo de s a v en G .

Demo: Por induccion. Si V (G ) = {s}, vale. Si |V (G )| ≥ 2, para cada x ,sea Px un camino mınimo de s a x con cantidad de aristas mınima. Seav tal que para todo v ′ ∈ V (G ), d(s, v ′) ≤ d(s, v). Ante empates en ladistancia, Pv es el que tiene mas aristas. Como no hay aristas de costonegativo y por la forma de elegir v y Px , para todo v ′, v no pertenece aPv ′ . Por lo tanto, en G − v existen caminos de s a todos los vertices.

Por hipotesis inductiva, existe T ′ arbol de caminos mınimos de G − v .Sea w el anteultimo vertice en Pv . Entonces d(s, v) = d(s,w) + `(wv).Luego, agregando a T ′ el vertice v y la arista wv obtenemos un arbol decaminos mınimos de G . 2

Page 106: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Arbol de caminos mınimos

Propiedad

Si G no tiene aristas de costo negativo y s es un vertice de G tal quepara todo v ∈ V (G ) existe un camino de s a v , entonces existe un arbolorientado T con raız s tal que para todo v ∈ V (G ), el camino de s a ven T es un camino mınimo de s a v en G .

Demo: Por induccion. Si V (G ) = {s}, vale. Si |V (G )| ≥ 2, para cada x ,sea Px un camino mınimo de s a x con cantidad de aristas mınima. Seav tal que para todo v ′ ∈ V (G ), d(s, v ′) ≤ d(s, v). Ante empates en ladistancia, Pv es el que tiene mas aristas. Como no hay aristas de costonegativo y por la forma de elegir v y Px , para todo v ′, v no pertenece aPv ′ . Por lo tanto, en G − v existen caminos de s a todos los vertices.Por hipotesis inductiva, existe T ′ arbol de caminos mınimos de G − v .

Sea w el anteultimo vertice en Pv . Entonces d(s, v) = d(s,w) + `(wv).Luego, agregando a T ′ el vertice v y la arista wv obtenemos un arbol decaminos mınimos de G . 2

Page 107: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Arbol de caminos mınimos

Propiedad

Si G no tiene aristas de costo negativo y s es un vertice de G tal quepara todo v ∈ V (G ) existe un camino de s a v , entonces existe un arbolorientado T con raız s tal que para todo v ∈ V (G ), el camino de s a ven T es un camino mınimo de s a v en G .

Demo: Por induccion. Si V (G ) = {s}, vale. Si |V (G )| ≥ 2, para cada x ,sea Px un camino mınimo de s a x con cantidad de aristas mınima. Seav tal que para todo v ′ ∈ V (G ), d(s, v ′) ≤ d(s, v). Ante empates en ladistancia, Pv es el que tiene mas aristas. Como no hay aristas de costonegativo y por la forma de elegir v y Px , para todo v ′, v no pertenece aPv ′ . Por lo tanto, en G − v existen caminos de s a todos los vertices.Por hipotesis inductiva, existe T ′ arbol de caminos mınimos de G − v .Sea w el anteultimo vertice en Pv . Entonces d(s, v) = d(s,w) + `(wv).Luego, agregando a T ′ el vertice v y la arista wv obtenemos un arbol decaminos mınimos de G . 2

Page 108: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Arbol de caminos mınimos

La propiedad vale igual para grafos con aristas negativas pero sinciclos negativos, aunque la demostracion es distinta.

Page 109: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore

Sirve para calcular un arbol de caminos mınimos desde unvertice s a todos los vertices alcanzables desde s.

Funciona cuando el grafo no tiene aristas negativas.

Input del algoritmo: grafo G = (V ,E ), V = {1, . . . , n},longitudes ` : E → R+.

Output del algoritmo: arbol de caminos mınimos desde elvertice 1.

Page 110: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore

Sirve para calcular un arbol de caminos mınimos desde unvertice s a todos los vertices alcanzables desde s.

Funciona cuando el grafo no tiene aristas negativas.

Input del algoritmo: grafo G = (V ,E ), V = {1, . . . , n},longitudes ` : E → R+.

Output del algoritmo: arbol de caminos mınimos desde elvertice 1.

Page 111: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = ∅π = (0,∞,∞,∞,∞,∞,∞)

P = (1, 0, 0, 0, 0, 0, 0)

Page 112: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1}π = (0,∞,∞,∞,∞,∞,∞)

P = (1, 0, 0, 0, 0, 0, 0)

Page 113: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1}π = (0, 1, 6,∞, 8,∞,∞)P = (1, 1, 1, 0, 1, 0, 0)

Page 114: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1, 2}π = (0, 1, 6,∞, 8,∞,∞)P = (1, 1, 1, 0, 1, 0, 0)

Page 115: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1, 2}π = (0, 1, 5, 3, 6,∞, 8)P = (1, 1, 2, 2, 2, 0, 2)

Page 116: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1, 2, 4}π = (0, 1, 5, 3, 6,∞, 8)P = (1, 1, 2, 2, 2, 0, 2)

Page 117: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1, 2, 4}π = (0, 1, 5, 3, 5,∞, 7)P = (1, 1, 2, 2, 4, 0, 4)

Page 118: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1, 2, 4, 3}π = (0, 1, 5, 3, 5,∞, 7)P = (1, 1, 2, 2, 4, 0, 4)

Page 119: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1, 2, 4, 3}π = (0, 1, 5, 3, 5, 8, 7)P = (1, 1, 2, 2, 4, 3, 4)

Page 120: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1, 2, 4, 3, 5}π = (0, 1, 5, 3, 5, 8, 7)P = (1, 1, 2, 2, 4, 3, 4)

Page 121: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1, 2, 4, 3, 5}π = (0, 1, 5, 3, 5, 8, 6)P = (1, 1, 2, 2, 4, 3, 5)

Page 122: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1, 2, 4, 3, 5, 7}π = (0, 1, 5, 3, 5, 8, 6)P = (1, 1, 2, 2, 4, 3, 5)

Page 123: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = {1, 2, 4, 3, 5, 7}π = (0, 1, 5, 3, 5, 8, 6)P = (1, 1, 2, 2, 4, 3, 5)

Page 124: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore (1959)

conjunto S ; vectores π y P de longitud n;

S = ∅;π(1) = 0; π(i) =∞ para 2 ≤ i ≤ n;

P(1) = 1; P(i) = 0 para 2 ≤ i ≤ n;

Mientras S 6= V

Elegir j 6∈ S tq π(j) = mini 6∈S π(i)

S = S ∪ {j};Para cada i ∈ suc(j) tq i 6∈ S

Si π(i) > π(j) + `(ji)

π(i) = π(j) + `(ji)

P(i) = j

1

2

34

56

7

1

8

6

5 2 4 7

1 324

15

2

S = Vπ = (0, 1, 5, 3, 5, 8, 6)P = (1, 1, 2, 2, 4, 3, 5)

Page 125: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6} π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 126: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1}

π = (0, 4, 7,∞,∞, 3)S = {1, 6} π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 127: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)

S = {1} π = (0, 4, 7,∞,∞, 3)

S = {1, 6} π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 128: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1}

π = (0, 4, 7,∞,∞, 3)S = {1, 6}

π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 129: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1}

π = (0, 4, 7,∞,∞, 3)S = {1, 6}

π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 130: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)

S = {1, 6} π = (0, 4, 7,∞, 6, 3)

S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 131: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6}

π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2}

π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 132: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6}

π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2}

π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 133: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6} π = (0, 4, 7,∞, 6, 3)

S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)

S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 134: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6} π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2}

π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5}

π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 135: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6} π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2}

π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5}

π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 136: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6} π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)

S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)

S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 137: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6} π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5}

π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3}

π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 138: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6} π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5}

π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3}

π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 139: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6} π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)

S = {1, 6, 2, 5, 3} π = (0, 4, 6, 7, 5, 3)

S = {1, 6, 2, 5, 3, 4}

Page 140: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

1

4

3

3

7

1 1

π = (0,∞,∞,∞,∞,∞)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6} π = (0, 4, 7,∞, 6, 3)S = {1, 6, 2} π = (0, 4, 7,∞, 5, 3)S = {1, 6, 2, 5} π = (0, 4, 6, 9, 5, 3)S = {1, 6, 2, 5, 3}

π = (0, 4, 6, 7, 5, 3)S = {1, 6, 2, 5, 3, 4}

Page 141: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

π = (0, ?, ?, ?, ?, ?)S = {1} π = (0, 4, 7,∞,∞, 3)S = {1, 6}

¡Ya no actualizara π(6)!

Page 142: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

π = (0, ?, ?, ?, ?, ?)S = {1}

π = (0, 4, 7,∞,∞, 3)S = {1, 6}

¡Ya no actualizara π(6)!

Page 143: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

π = (0, ?, ?, ?, ?, ?)

S = {1} π = (0, 4, 7,∞,∞, 3)

S = {1, 6}

¡Ya no actualizara π(6)!

Page 144: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

π = (0, ?, ?, ?, ?, ?)S = {1}

π = (0, 4, 7,∞,∞, 3)S = {1, 6}

¡Ya no actualizara π(6)!

Page 145: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

π = (0, ?, ?, ?, ?, ?)S = {1}

π = (0, 4, 7,∞,∞, 3)S = {1, 6}

¡Ya no actualizara π(6)!

Page 146: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore

¿Cual es la complejidad del algoritmo?

Page 147: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore

En cada iteracion agrega un nuevo vertice a S , por lo tantotermina en n iteraciones.

El costo de cada iteracion es O(n + d(j)) u O(log n + d(j))segun como se implemente S . Como j recorre V , el costototal del algoritmo es O(n2) u O(m + n log n),respectivamente.

Notacion: π∗(i) = d(1, i); πS(i) = longitud del caminomınimo de 1 a i que solo pasa por vertices de S .

Lema: Al terminar cada iteracion, para todo i ∈ V vale:

1. i ∈ S ⇒ π(i) = π∗(i).2. i 6∈ S ⇒ π(i) = πS(i).

Teorema: El algoritmo funciona.

1. Termina.2. Cuando termina S = V , y por el lema, ∀i ∈ V π(i) = π∗(i).

Page 148: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore

En cada iteracion agrega un nuevo vertice a S , por lo tantotermina en n iteraciones.

El costo de cada iteracion es O(n + d(j)) u O(log n + d(j))segun como se implemente S . Como j recorre V , el costototal del algoritmo es O(n2) u O(m + n log n),respectivamente.

Notacion: π∗(i) = d(1, i); πS(i) = longitud del caminomınimo de 1 a i que solo pasa por vertices de S .

Lema: Al terminar cada iteracion, para todo i ∈ V vale:

1. i ∈ S ⇒ π(i) = π∗(i).2. i 6∈ S ⇒ π(i) = πS(i).

Teorema: El algoritmo funciona.

1. Termina.2. Cuando termina S = V , y por el lema, ∀i ∈ V π(i) = π∗(i).

Page 149: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore

En cada iteracion agrega un nuevo vertice a S , por lo tantotermina en n iteraciones.

El costo de cada iteracion es O(n + d(j)) u O(log n + d(j))segun como se implemente S . Como j recorre V , el costototal del algoritmo es O(n2) u O(m + n log n),respectivamente.

Notacion: π∗(i) = d(1, i); πS(i) = longitud del caminomınimo de 1 a i que solo pasa por vertices de S .

Lema: Al terminar cada iteracion, para todo i ∈ V vale:

1. i ∈ S ⇒ π(i) = π∗(i).2. i 6∈ S ⇒ π(i) = πS(i).

Teorema: El algoritmo funciona.

1. Termina.2. Cuando termina S = V , y por el lema, ∀i ∈ V π(i) = π∗(i).

Page 150: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore

En cada iteracion agrega un nuevo vertice a S , por lo tantotermina en n iteraciones.

El costo de cada iteracion es O(n + d(j)) u O(log n + d(j))segun como se implemente S . Como j recorre V , el costototal del algoritmo es O(n2) u O(m + n log n),respectivamente.

Notacion: π∗(i) = d(1, i); πS(i) = longitud del caminomınimo de 1 a i que solo pasa por vertices de S .

Lema: Al terminar cada iteracion, para todo i ∈ V vale:

1. i ∈ S ⇒ π(i) = π∗(i).2. i 6∈ S ⇒ π(i) = πS(i).

Teorema: El algoritmo funciona.

1. Termina.2. Cuando termina S = V , y por el lema, ∀i ∈ V π(i) = π∗(i).

Page 151: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dijkstra & Moore

En cada iteracion agrega un nuevo vertice a S , por lo tantotermina en n iteraciones.

El costo de cada iteracion es O(n + d(j)) u O(log n + d(j))segun como se implemente S . Como j recorre V , el costototal del algoritmo es O(n2) u O(m + n log n),respectivamente.

Notacion: π∗(i) = d(1, i); πS(i) = longitud del caminomınimo de 1 a i que solo pasa por vertices de S .

Lema: Al terminar cada iteracion, para todo i ∈ V vale:

1. i ∈ S ⇒ π(i) = π∗(i).2. i 6∈ S ⇒ π(i) = πS(i).

Teorema: El algoritmo funciona.

1. Termina.2. Cuando termina S = V , y por el lema, ∀i ∈ V π(i) = π∗(i).

Page 152: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Demostracion del lema

Por induccion en la cantidad de iteraciones. Como inicialmente π(1) = 0y π(i) =∞ para i 6= 1, luego de la primera iteracion, S = {1}. Ademas,por como se actualizo π, vale π(1) = 0 = π∗(1), π(i) = `(1i) = πS(i)para los sucesores de 1 y π(i) =∞ = πS(i) para el resto de los vertices.

Supongamos por hipotesis inductiva que el lema vale para S y veamosque vale para S ∪ {j} luego de completar la siguiente iteracion. Como πno se modifica para los elementos de S , vale π(i) = π∗(i) para i ∈ S .

Falta probar entonces

1. π(j) = π∗(j) y

2. π(i) = πS∪{j}(i) para i 6∈ S ∪ {j}.

Page 153: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Demostracion del lema

Por induccion en la cantidad de iteraciones. Como inicialmente π(1) = 0y π(i) =∞ para i 6= 1, luego de la primera iteracion, S = {1}. Ademas,por como se actualizo π, vale π(1) = 0 = π∗(1), π(i) = `(1i) = πS(i)para los sucesores de 1 y π(i) =∞ = πS(i) para el resto de los vertices.

Supongamos por hipotesis inductiva que el lema vale para S y veamosque vale para S ∪ {j} luego de completar la siguiente iteracion. Como πno se modifica para los elementos de S , vale π(i) = π∗(i) para i ∈ S .

Falta probar entonces

1. π(j) = π∗(j) y

2. π(i) = πS∪{j}(i) para i 6∈ S ∪ {j}.

Page 154: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Demostracion del lema

1. π(j) = π∗(j)

Por HI sabıamos que π(j) = πS(j). Tomemos un camino P de 1 a j .1

Sea i el primer vertice fuera de S en P (podrıa ser j), y sea Pi elsubcamino de P que va de 1 a i . Como no hay aristas negativas,`(P) ≥ `(Pi ) ≥ πS(i) ≥ πS(j) por HI y la forma de elegir j . Luegoπ∗(j) = πS(j) = π(j).

2. π(i) = πS∪{j}(i) para i 6∈ S ∪ {j}

Sea i 6∈ S , i 6= {j}. Claramente, πS∪{j}(i) ≤ min{πS(i), π∗(j) + `(ji)}.Veamos la desigualdad inversa. Sea P un camino de 1 a i que solo pasapor S ∪ {j}. Sea v el ultimo vertice antes de i en P. Si v = j , entonces`(P) ≥ π∗(j) + `(ji) (∗). Si v ∈ S , sea P ′ el camino que se obtiene dereemplazar en P el subcamino de 1 a v por un camino de 1 a v delongitud π∗(v) que solo pase por S , que por HI sabemos que existe.Entonces `(P) ≥ `(P ′) ≥ πS(i) (∗∗).Por (∗) y (∗∗), vale πS∪{j}(i) ≥ min{πS(i), π∗(j) + `(ji)}. 2

1Podemos considerar que existen todas las aristas pero algunas pesan ∞.

Page 155: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Demostracion del lema

1. π(j) = π∗(j)

Por HI sabıamos que π(j) = πS(j). Tomemos un camino P de 1 a j .1

Sea i el primer vertice fuera de S en P (podrıa ser j), y sea Pi elsubcamino de P que va de 1 a i . Como no hay aristas negativas,`(P) ≥ `(Pi ) ≥ πS(i) ≥ πS(j) por HI y la forma de elegir j . Luegoπ∗(j) = πS(j) = π(j).

2. π(i) = πS∪{j}(i) para i 6∈ S ∪ {j}

Sea i 6∈ S , i 6= {j}. Claramente, πS∪{j}(i) ≤ min{πS(i), π∗(j) + `(ji)}.Veamos la desigualdad inversa.

Sea P un camino de 1 a i que solo pasapor S ∪ {j}. Sea v el ultimo vertice antes de i en P. Si v = j , entonces`(P) ≥ π∗(j) + `(ji) (∗). Si v ∈ S , sea P ′ el camino que se obtiene dereemplazar en P el subcamino de 1 a v por un camino de 1 a v delongitud π∗(v) que solo pase por S , que por HI sabemos que existe.Entonces `(P) ≥ `(P ′) ≥ πS(i) (∗∗).Por (∗) y (∗∗), vale πS∪{j}(i) ≥ min{πS(i), π∗(j) + `(ji)}. 2

1Podemos considerar que existen todas las aristas pero algunas pesan ∞.

Page 156: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Demostracion del lema

1. π(j) = π∗(j)

Por HI sabıamos que π(j) = πS(j). Tomemos un camino P de 1 a j .1

Sea i el primer vertice fuera de S en P (podrıa ser j), y sea Pi elsubcamino de P que va de 1 a i . Como no hay aristas negativas,`(P) ≥ `(Pi ) ≥ πS(i) ≥ πS(j) por HI y la forma de elegir j . Luegoπ∗(j) = πS(j) = π(j).

2. π(i) = πS∪{j}(i) para i 6∈ S ∪ {j}

Sea i 6∈ S , i 6= {j}. Claramente, πS∪{j}(i) ≤ min{πS(i), π∗(j) + `(ji)}.Veamos la desigualdad inversa. Sea P un camino de 1 a i que solo pasapor S ∪ {j}. Sea v el ultimo vertice antes de i en P. Si v = j , entonces`(P) ≥ π∗(j) + `(ji) (∗).

Si v ∈ S , sea P ′ el camino que se obtiene dereemplazar en P el subcamino de 1 a v por un camino de 1 a v delongitud π∗(v) que solo pase por S , que por HI sabemos que existe.Entonces `(P) ≥ `(P ′) ≥ πS(i) (∗∗).Por (∗) y (∗∗), vale πS∪{j}(i) ≥ min{πS(i), π∗(j) + `(ji)}. 2

1Podemos considerar que existen todas las aristas pero algunas pesan ∞.

Page 157: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Demostracion del lema

1. π(j) = π∗(j)

Por HI sabıamos que π(j) = πS(j). Tomemos un camino P de 1 a j .1

Sea i el primer vertice fuera de S en P (podrıa ser j), y sea Pi elsubcamino de P que va de 1 a i . Como no hay aristas negativas,`(P) ≥ `(Pi ) ≥ πS(i) ≥ πS(j) por HI y la forma de elegir j . Luegoπ∗(j) = πS(j) = π(j).

2. π(i) = πS∪{j}(i) para i 6∈ S ∪ {j}

Sea i 6∈ S , i 6= {j}. Claramente, πS∪{j}(i) ≤ min{πS(i), π∗(j) + `(ji)}.Veamos la desigualdad inversa. Sea P un camino de 1 a i que solo pasapor S ∪ {j}. Sea v el ultimo vertice antes de i en P. Si v = j , entonces`(P) ≥ π∗(j) + `(ji) (∗). Si v ∈ S , sea P ′ el camino que se obtiene dereemplazar en P el subcamino de 1 a v por un camino de 1 a v delongitud π∗(v) que solo pase por S , que por HI sabemos que existe.Entonces `(P) ≥ `(P ′) ≥ πS(i) (∗∗).Por (∗) y (∗∗), vale πS∪{j}(i) ≥ min{πS(i), π∗(j) + `(ji)}. 2

1Podemos considerar que existen todas las aristas pero algunas pesan ∞.

Page 158: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Teorema

Sea G = (V ,E ), s ∈ V , sin ciclos negativos. Para cada j ∈ V , sea dj lalongitud de un camino de s a j . Los numeros dj representan lasdistancias de s a j si y solo si ds = 0 y dj ≤ di + `(ij) ∀ij ∈ E .

Demo: ⇒) Es claro que ds = 0. Supongamos que dj > di + `(ij) paraalgun ij ∈ E . Como di es la longitud de un camino P entre s e i ,entonces `(P + ij) = di + `(ij) < dj , por lo tanto dj no es la distanciaentre s y j .⇐) Sea P = s = i1i2 . . . ik = j un camino de s a j .

dj = dik ≤ dik−1+ `(ik−1ik)

dik−1≤ dik−2

+ `(ik−2ik−1)...

di2 ≤ di1 + `(i1i2) = `(i1i2)dj = dik ≤

∑ij∈P `(ij)

Entonces dj es cota inferior de la longitud de cualquier camino de s a j . 2

Page 159: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Teorema

Sea G = (V ,E ), s ∈ V , sin ciclos negativos. Para cada j ∈ V , sea dj lalongitud de un camino de s a j . Los numeros dj representan lasdistancias de s a j si y solo si ds = 0 y dj ≤ di + `(ij) ∀ij ∈ E .

Demo: ⇒) Es claro que ds = 0. Supongamos que dj > di + `(ij) paraalgun ij ∈ E . Como di es la longitud de un camino P entre s e i ,entonces `(P + ij) = di + `(ij) < dj , por lo tanto dj no es la distanciaentre s y j .

⇐) Sea P = s = i1i2 . . . ik = j un camino de s a j .

dj = dik ≤ dik−1+ `(ik−1ik)

dik−1≤ dik−2

+ `(ik−2ik−1)...

di2 ≤ di1 + `(i1i2) = `(i1i2)dj = dik ≤

∑ij∈P `(ij)

Entonces dj es cota inferior de la longitud de cualquier camino de s a j . 2

Page 160: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Teorema

Sea G = (V ,E ), s ∈ V , sin ciclos negativos. Para cada j ∈ V , sea dj lalongitud de un camino de s a j . Los numeros dj representan lasdistancias de s a j si y solo si ds = 0 y dj ≤ di + `(ij) ∀ij ∈ E .

Demo: ⇒) Es claro que ds = 0. Supongamos que dj > di + `(ij) paraalgun ij ∈ E . Como di es la longitud de un camino P entre s e i ,entonces `(P + ij) = di + `(ij) < dj , por lo tanto dj no es la distanciaentre s y j .⇐) Sea P = s = i1i2 . . . ik = j un camino de s a j .

dj = dik ≤ dik−1+ `(ik−1ik)

dik−1≤ dik−2

+ `(ik−2ik−1)...

di2 ≤ di1 + `(i1i2) = `(i1i2)dj = dik ≤

∑ij∈P `(ij)

Entonces dj es cota inferior de la longitud de cualquier camino de s a j . 2

Page 161: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo generico de correccion de etiquetas

vectores d y P de longitud n;

d(s) = 0; P(s) = 0;

d(j) =∞ para 1 ≤ j ≤ n, j 6= s;

Mientras exista ij ∈ E con d(j) > d(i) + `(ij)

d(j) = d(i) + `(ij);

P(j) = i ;

Page 162: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Propiedad

Todo ij en el grafo de predecesores tiene `(ij) + di − dj ≤ 0.

Demo: Cuando se agrega una arista ij , dj = di + `(ij) ⇒`(ij) + di − dj = 0. En las siguientes iteraciones,

si di disminuye, entonces `(ij) + di − dj ≤ 0.

si dj disminuye, se elimina la arista ij del grafo.

2

Page 163: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Propiedad

Si no hay ciclos negativos, el grafo de predecesores tiene un unico caminodesde s hacia todo otro vertice k alcanzable desde s, y este camino tienelongitud a lo sumo dk .

Demo: Por induccion en la cantidad de iteraciones del algoritmo, hay ununico camino desde s hacia todo otro vertice k alcanzable desde s (seusa que no hay ciclos negativos para probar que a s nunca se le asigna unpadre distinto de 0). Sea P el camino de s a k .0 ≥

∑ij∈P(`(ij) + di − dj) =

∑ij∈P `(ij) + ds − dk =

∑ij∈P `(ij)− dk ⇒∑

ij∈P ≤ dk . 2

Corolario

Si el algoritmo termina, el grafo de predecesores es un arbol generador decaminos mınimos (y se puede probar que si no hay ciclos negativos,termina).

Page 164: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford (1956)

vectores dk , k = 0, . . . , n, de longitud n;

d0(1) = 0; d0(i) =∞ ∀i 6= 1; k = 1;

T1 = falso; T2 = falso;

Mientras ¬(T1 ∨ T2)

dk(1) = 0;

Para i desde 2 hasta n

dk(i) = min{dk−1(i),minji∈E (dk−1(j) + `(ji))};Si dk(i) = dk−1(i) para todo i

T1 = verdadero;

Si no

Si k = n

T2 = verdadero;

Si no

k = k + 1;

Page 165: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 166: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 167: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 168: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 169: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 170: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 171: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 172: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 173: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 174: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 175: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 176: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 177: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 178: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 179: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 180: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 181: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 182: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 183: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 184: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford: ejemplo

1

2 3

4

56

4

3

7

3

1

4

3

1-2 1

d1 = (0,∞,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

Iteracion 1

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0,∞,∞,∞,∞,∞)d1 = (0, 4,∞,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4,∞,∞,∞,∞)d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞,∞)

d0 = (0,∞,∞,∞,∞,∞)

d1 = (0, 4, 7,∞,∞, 3)

d0 = (0,∞,∞,∞,∞,∞)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

Iteracion 2

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7,∞,∞, 3)d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8,∞, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 3)

d1 = (0, 4, 7,∞,∞, 3)

d2 = (0, 4, 7, 8, 5, 2)

d1 = (0, 4, 7,∞,∞, 3)

Page 185: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford

El invariante del algoritmo es dk(i) = camino mınimo de 1 a ique usa a lo sumo k aristas.

Si no hay ciclos negativos, hay camino mınimo con a lo sumon − 1 aristas.

Entonces, con este invariante, el algoritmo funciona.

¿Cual es la complejidad?

Se puede hacer facil usando 2 arreglos y con cuidado, usando1 arreglo.

Page 186: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford

El invariante del algoritmo es dk(i) = camino mınimo de 1 a ique usa a lo sumo k aristas.

Si no hay ciclos negativos, hay camino mınimo con a lo sumon − 1 aristas.

Entonces, con este invariante, el algoritmo funciona.

¿Cual es la complejidad?

Se puede hacer facil usando 2 arreglos y con cuidado, usando1 arreglo.

Page 187: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford

El invariante del algoritmo es dk(i) = camino mınimo de 1 a ique usa a lo sumo k aristas.

Si no hay ciclos negativos, hay camino mınimo con a lo sumon − 1 aristas.

Entonces, con este invariante, el algoritmo funciona.

¿Cual es la complejidad?

Se puede hacer facil usando 2 arreglos y con cuidado, usando1 arreglo.

Page 188: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford

El invariante del algoritmo es dk(i) = camino mınimo de 1 a ique usa a lo sumo k aristas.

Si no hay ciclos negativos, hay camino mınimo con a lo sumon − 1 aristas.

Entonces, con este invariante, el algoritmo funciona.

¿Cual es la complejidad?

Se puede hacer facil usando 2 arreglos y con cuidado, usando1 arreglo.

Page 189: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Bellman & Ford

El invariante del algoritmo es dk(i) = camino mınimo de 1 a ique usa a lo sumo k aristas.

Si no hay ciclos negativos, hay camino mınimo con a lo sumon − 1 aristas.

Entonces, con este invariante, el algoritmo funciona.

¿Cual es la complejidad?

Se puede hacer facil usando 2 arreglos y con cuidado, usando1 arreglo.

Page 190: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmos matricialesLos algoritmos de Dantzig y Floyd calculan los caminos mınimosentre todos los pares de vertices. Sea L[i , j ] la distancia de i a j ,`(i , j) la longitud de la arista ij o ∞ si no existe.

1 2

3 4

3

32

2

2-2

1

4

4

` =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

Page 191: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd (1962)

El algoritmo de Floyd en cada paso k calcula el caminomınimo de i a j con vertices intermedios en el conjunto{1, . . . , k}.

Lk es la matriz del paso k :

L0[i , i ] = 0 y para i 6= j , L0[i , j ] = `(ij) si ij ∈ E y L0[i , j ] =∞si ij 6∈ E .Lk+1[i , j ] = min{Lk [i , j ], Lk [i , k + 1] + Lk [k + 1, j ]}.

Ln es la matriz buscada. ¿Como se detectan ciclos negativos?

En ambos algoritmos se puede trabajar corrigiendo sobre lamisma matriz (los superındices son a fines de entender elalgoritmo).

Page 192: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd (1962)

El algoritmo de Floyd en cada paso k calcula el caminomınimo de i a j con vertices intermedios en el conjunto{1, . . . , k}.Lk es la matriz del paso k :

L0[i , i ] = 0 y para i 6= j , L0[i , j ] = `(ij) si ij ∈ E y L0[i , j ] =∞si ij 6∈ E .Lk+1[i , j ] = min{Lk [i , j ], Lk [i , k + 1] + Lk [k + 1, j ]}.

Ln es la matriz buscada. ¿Como se detectan ciclos negativos?

En ambos algoritmos se puede trabajar corrigiendo sobre lamisma matriz (los superındices son a fines de entender elalgoritmo).

Page 193: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd (1962)

El algoritmo de Floyd en cada paso k calcula el caminomınimo de i a j con vertices intermedios en el conjunto{1, . . . , k}.Lk es la matriz del paso k :

L0[i , i ] = 0 y para i 6= j , L0[i , j ] = `(ij) si ij ∈ E y L0[i , j ] =∞si ij 6∈ E .

Lk+1[i , j ] = min{Lk [i , j ], Lk [i , k + 1] + Lk [k + 1, j ]}.

Ln es la matriz buscada. ¿Como se detectan ciclos negativos?

En ambos algoritmos se puede trabajar corrigiendo sobre lamisma matriz (los superındices son a fines de entender elalgoritmo).

Page 194: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd (1962)

El algoritmo de Floyd en cada paso k calcula el caminomınimo de i a j con vertices intermedios en el conjunto{1, . . . , k}.Lk es la matriz del paso k :

L0[i , i ] = 0 y para i 6= j , L0[i , j ] = `(ij) si ij ∈ E y L0[i , j ] =∞si ij 6∈ E .Lk+1[i , j ] = min{Lk [i , j ], Lk [i , k + 1] + Lk [k + 1, j ]}.

Ln es la matriz buscada. ¿Como se detectan ciclos negativos?

En ambos algoritmos se puede trabajar corrigiendo sobre lamisma matriz (los superındices son a fines de entender elalgoritmo).

Page 195: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd (1962)

El algoritmo de Floyd en cada paso k calcula el caminomınimo de i a j con vertices intermedios en el conjunto{1, . . . , k}.Lk es la matriz del paso k :

L0[i , i ] = 0 y para i 6= j , L0[i , j ] = `(ij) si ij ∈ E y L0[i , j ] =∞si ij 6∈ E .Lk+1[i , j ] = min{Lk [i , j ], Lk [i , k + 1] + Lk [k + 1, j ]}.

Ln es la matriz buscada. ¿Como se detectan ciclos negativos?

En ambos algoritmos se puede trabajar corrigiendo sobre lamisma matriz (los superındices son a fines de entender elalgoritmo).

Page 196: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd (1962)

El algoritmo de Floyd en cada paso k calcula el caminomınimo de i a j con vertices intermedios en el conjunto{1, . . . , k}.Lk es la matriz del paso k :

L0[i , i ] = 0 y para i 6= j , L0[i , j ] = `(ij) si ij ∈ E y L0[i , j ] =∞si ij 6∈ E .Lk+1[i , j ] = min{Lk [i , j ], Lk [i , k + 1] + Lk [k + 1, j ]}.

Ln es la matriz buscada. ¿Como se detectan ciclos negativos?

En ambos algoritmos se puede trabajar corrigiendo sobre lamisma matriz (los superındices son a fines de entender elalgoritmo).

Page 197: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 198: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 199: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 200: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 201: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1

0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 202: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 203: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 204: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 205: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 206: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5

3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 207: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 208: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 209: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6

4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 210: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 211: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 212: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 213: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 214: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0

0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 215: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 216: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 217: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2

4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 218: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 219: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 220: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Floyd: ejemplo

1 2

3 4

3

32

2

2-2

1

4

4

L0 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2

k = 1 i = 3 j = 2

∞-2

3

1 0 1

∞ 4 4 0

L1 =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3

k = 2 i = 1 j = 3

∞3

2

5 3

2 0 2 2

-2 1 0 1

k = 2 i = 4 j = 1

∞ 4

2

6 4 4 0

L2 =

1

2

3

4

1 2 3 4

0 3 5 3

2 0 2 2

-2 1 0 1

6 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

k = 3 i = 2 j = 1

2 2

-2

0 0 2 2

-2 1 0 1

k = 3 i = 4 j = 1

6 4

-2

2 4 4 0

L3 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

L = L4 =

1

2

3

4

1 2 3 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

Page 221: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig (1966)

El algoritmo de Dantzig en cada paso k considera el subgrafoinducido por los vertices 1, . . . , k .

Entonces Lk es la matriz de distancias en ese subgrafo:

Lk+1[i , k + 1] = min1≤j≤k Lk [i , j ] + `(j , k + 1).

Lk+1[k + 1, i ] = min1≤j≤k Lk [j , i ] + `(k + 1, j).

Lk+1[k + 1, k + 1] =min{0,min1≤i≤k L

k+1[k + 1, i ] + Lk+1[i , k + 1]}.Lk+1[i , j ] = min{Lk [i , j ], Lk+1[i , k + 1] + Lk+1[k + 1, j ]}.

Ln es la matriz buscada.

¿Cual es la complejidad? ¿Como es con respecto a aplicar Dijkstran veces si no hay aristas negativas?

¿Que diferencia tiene con el algoritmo de Floyd?

¿Que ventajas o desventajas tiene?

Page 222: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig (1966)

El algoritmo de Dantzig en cada paso k considera el subgrafoinducido por los vertices 1, . . . , k .

Entonces Lk es la matriz de distancias en ese subgrafo:

Lk+1[i , k + 1] = min1≤j≤k Lk [i , j ] + `(j , k + 1).

Lk+1[k + 1, i ] = min1≤j≤k Lk [j , i ] + `(k + 1, j).

Lk+1[k + 1, k + 1] =min{0,min1≤i≤k L

k+1[k + 1, i ] + Lk+1[i , k + 1]}.Lk+1[i , j ] = min{Lk [i , j ], Lk+1[i , k + 1] + Lk+1[k + 1, j ]}.

Ln es la matriz buscada.

¿Cual es la complejidad? ¿Como es con respecto a aplicar Dijkstran veces si no hay aristas negativas?

¿Que diferencia tiene con el algoritmo de Floyd?

¿Que ventajas o desventajas tiene?

Page 223: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig (1966)

El algoritmo de Dantzig en cada paso k considera el subgrafoinducido por los vertices 1, . . . , k .

Entonces Lk es la matriz de distancias en ese subgrafo:

Lk+1[i , k + 1] = min1≤j≤k Lk [i , j ] + `(j , k + 1).

Lk+1[k + 1, i ] = min1≤j≤k Lk [j , i ] + `(k + 1, j).

Lk+1[k + 1, k + 1] =min{0,min1≤i≤k L

k+1[k + 1, i ] + Lk+1[i , k + 1]}.Lk+1[i , j ] = min{Lk [i , j ], Lk+1[i , k + 1] + Lk+1[k + 1, j ]}.

Ln es la matriz buscada.

¿Cual es la complejidad? ¿Como es con respecto a aplicar Dijkstran veces si no hay aristas negativas?

¿Que diferencia tiene con el algoritmo de Floyd?

¿Que ventajas o desventajas tiene?

Page 224: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig (1966)

El algoritmo de Dantzig en cada paso k considera el subgrafoinducido por los vertices 1, . . . , k .

Entonces Lk es la matriz de distancias en ese subgrafo:

Lk+1[i , k + 1] = min1≤j≤k Lk [i , j ] + `(j , k + 1).

Lk+1[k + 1, i ] = min1≤j≤k Lk [j , i ] + `(k + 1, j).

Lk+1[k + 1, k + 1] =min{0,min1≤i≤k L

k+1[k + 1, i ] + Lk+1[i , k + 1]}.Lk+1[i , j ] = min{Lk [i , j ], Lk+1[i , k + 1] + Lk+1[k + 1, j ]}.

Ln es la matriz buscada.

¿Cual es la complejidad? ¿Como es con respecto a aplicar Dijkstran veces si no hay aristas negativas?

¿Que diferencia tiene con el algoritmo de Floyd?

¿Que ventajas o desventajas tiene?

Page 225: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig (1966)

El algoritmo de Dantzig en cada paso k considera el subgrafoinducido por los vertices 1, . . . , k .

Entonces Lk es la matriz de distancias en ese subgrafo:

Lk+1[i , k + 1] = min1≤j≤k Lk [i , j ] + `(j , k + 1).

Lk+1[k + 1, i ] = min1≤j≤k Lk [j , i ] + `(k + 1, j).

Lk+1[k + 1, k + 1] =min{0,min1≤i≤k L

k+1[k + 1, i ] + Lk+1[i , k + 1]}.

Lk+1[i , j ] = min{Lk [i , j ], Lk+1[i , k + 1] + Lk+1[k + 1, j ]}.

Ln es la matriz buscada.

¿Cual es la complejidad? ¿Como es con respecto a aplicar Dijkstran veces si no hay aristas negativas?

¿Que diferencia tiene con el algoritmo de Floyd?

¿Que ventajas o desventajas tiene?

Page 226: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig (1966)

El algoritmo de Dantzig en cada paso k considera el subgrafoinducido por los vertices 1, . . . , k .

Entonces Lk es la matriz de distancias en ese subgrafo:

Lk+1[i , k + 1] = min1≤j≤k Lk [i , j ] + `(j , k + 1).

Lk+1[k + 1, i ] = min1≤j≤k Lk [j , i ] + `(k + 1, j).

Lk+1[k + 1, k + 1] =min{0,min1≤i≤k L

k+1[k + 1, i ] + Lk+1[i , k + 1]}.Lk+1[i , j ] = min{Lk [i , j ], Lk+1[i , k + 1] + Lk+1[k + 1, j ]}.

Ln es la matriz buscada.

¿Cual es la complejidad? ¿Como es con respecto a aplicar Dijkstran veces si no hay aristas negativas?

¿Que diferencia tiene con el algoritmo de Floyd?

¿Que ventajas o desventajas tiene?

Page 227: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig (1966)

El algoritmo de Dantzig en cada paso k considera el subgrafoinducido por los vertices 1, . . . , k .

Entonces Lk es la matriz de distancias en ese subgrafo:

Lk+1[i , k + 1] = min1≤j≤k Lk [i , j ] + `(j , k + 1).

Lk+1[k + 1, i ] = min1≤j≤k Lk [j , i ] + `(k + 1, j).

Lk+1[k + 1, k + 1] =min{0,min1≤i≤k L

k+1[k + 1, i ] + Lk+1[i , k + 1]}.Lk+1[i , j ] = min{Lk [i , j ], Lk+1[i , k + 1] + Lk+1[k + 1, j ]}.

Ln es la matriz buscada.

¿Cual es la complejidad? ¿Como es con respecto a aplicar Dijkstran veces si no hay aristas negativas?

¿Que diferencia tiene con el algoritmo de Floyd?

¿Que ventajas o desventajas tiene?

Page 228: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig (1966)

El algoritmo de Dantzig en cada paso k considera el subgrafoinducido por los vertices 1, . . . , k .

Entonces Lk es la matriz de distancias en ese subgrafo:

Lk+1[i , k + 1] = min1≤j≤k Lk [i , j ] + `(j , k + 1).

Lk+1[k + 1, i ] = min1≤j≤k Lk [j , i ] + `(k + 1, j).

Lk+1[k + 1, k + 1] =min{0,min1≤i≤k L

k+1[k + 1, i ] + Lk+1[i , k + 1]}.Lk+1[i , j ] = min{Lk [i , j ], Lk+1[i , k + 1] + Lk+1[k + 1, j ]}.

Ln es la matriz buscada.

¿Cual es la complejidad? ¿Como es con respecto a aplicar Dijkstran veces si no hay aristas negativas?

¿Que diferencia tiene con el algoritmo de Floyd?

¿Que ventajas o desventajas tiene?

Page 229: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig (1966)

El algoritmo de Dantzig en cada paso k considera el subgrafoinducido por los vertices 1, . . . , k .

Entonces Lk es la matriz de distancias en ese subgrafo:

Lk+1[i , k + 1] = min1≤j≤k Lk [i , j ] + `(j , k + 1).

Lk+1[k + 1, i ] = min1≤j≤k Lk [j , i ] + `(k + 1, j).

Lk+1[k + 1, k + 1] =min{0,min1≤i≤k L

k+1[k + 1, i ] + Lk+1[i , k + 1]}.Lk+1[i , j ] = min{Lk [i , j ], Lk+1[i , k + 1] + Lk+1[k + 1, j ]}.

Ln es la matriz buscada.

¿Cual es la complejidad? ¿Como es con respecto a aplicar Dijkstran veces si no hay aristas negativas?

¿Que diferencia tiene con el algoritmo de Floyd?

¿Que ventajas o desventajas tiene?

Page 230: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig (1966)

El algoritmo de Dantzig en cada paso k considera el subgrafoinducido por los vertices 1, . . . , k .

Entonces Lk es la matriz de distancias en ese subgrafo:

Lk+1[i , k + 1] = min1≤j≤k Lk [i , j ] + `(j , k + 1).

Lk+1[k + 1, i ] = min1≤j≤k Lk [j , i ] + `(k + 1, j).

Lk+1[k + 1, k + 1] =min{0,min1≤i≤k L

k+1[k + 1, i ] + Lk+1[i , k + 1]}.Lk+1[i , j ] = min{Lk [i , j ], Lk+1[i , k + 1] + Lk+1[k + 1, j ]}.

Ln es la matriz buscada.

¿Cual es la complejidad? ¿Como es con respecto a aplicar Dijkstran veces si no hay aristas negativas?

¿Que diferencia tiene con el algoritmo de Floyd?

¿Que ventajas o desventajas tiene?

Page 231: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1k = 2k = 3k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 232: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1

k = 2k = 3k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 233: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1

k = 2k = 3k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 234: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1

k = 2k = 3k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 235: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1

k = 2

k = 3k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 236: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1

k = 2

k = 3k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 237: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1

k = 2

k = 3k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 238: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1

k = 2

k = 3k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 239: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1k = 2

k = 3

k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 240: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1k = 2

k = 3

k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 241: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1k = 2

k = 3

k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 242: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1k = 2

k = 3

k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0

Page 243: Algoritmos para determinar Caminos Mínimos en Grafos · Algoritmos para recorrido de grafos ... calcular una propiedad del grafo, por ejemplo sus componentes conexas. obtener un

Algoritmos para recorrido de grafosProblemas de camino mınimo

Algoritmo de Dijkstra & MooreAlgoritmo de Bellman & FordAlgoritmos de Dantzig & Floyd

Algoritmo de Dantzig: ejemplo

k = 1k = 2k = 3

k = 4

1 2

3 4

3

32

2

2-2

1

4

4

L =

1

2

3

4

1 2 3 4

0 3 ∞ 3

2 0 2 2

-2 ∞ 0 1

∞ 4 4 0

3

2

0 ∞

2

-2 ∞

0 3 5 3

2 0 2 2

-2 1 0 1

∞ 4 4 0

0 3 5 3

0 0 2 2

-2 1 0 1

∞ 4 4 0

0 3

2 0

3

2

1

∞ 4 4

0 3 5 3

0 0 2 2

-2 1 0 1

2 4 4 0

0 3 5

0 0 2

-2 1 0