NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de...

63
ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co NIVEL 17: ESTRUCTURAS NO LINEALES Búsqueda caminos y ciclos 1

Transcript of NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de...

Page 1: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

NIVEL 17: ESTRUCTURAS NO LINEALES

Búsqueda caminos y ciclos

1

Page 2: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Agenda

• Caminos en un grafo

• Caminos acíclicos• Caminos con ciclos

• Clase Camino

• Camino entre dos vértices

• Camino más barato entre dos vértices y su costo

• Detección de ciclos

• ¿Hay ciclos desde un vértice?

• ¿El grafo es acíclico?

2

Page 3: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclico

• ¿Cómo buscar caminos en un grafo dirigido utilizando un planteamiento recursivo?

3

Page 4: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclico

Verificación de existencia:• Problema: Determinar si existe un camino entre dos vértices v1 y v2 de un grafo

4

Grafo acíclico Grafo con ciclos

Page 5: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclico

Verificación de existencia:• Problema: Determinar si existe un camino entre dos vértices v1 y v2 de un grafo.

5

Grafo acíclico: No hay riesgo de quedarse haciendo llamadas recursivas.

Se trata como si fuera un árbol n-ario.

Grafo con ciclos

Page 6: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclico

Verificación de existencia:• Problema: Determinar si existe un camino entre dos vértices v1 y v2 de un grafo

6

Grafo acíclico Grafo con ciclos: Los ciclos pueden generar llamadas recursivas infinitas.

Es necesario recordar los puntos por los cuales ya ha pasado el proceso de búsqueda para evitar hacer de nuevo una llamada recursiva desde ese vértice.

MARCAR

Page 7: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclico

Formalismo extendido para incluir la noción de vértice marcado

• G = ( V, A, V’ ), V’ V, v V’ si v está marcado

7

v1 v2

V3

v4

v5Marcados

Page 8: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclicoVerificación de existencia:

8

• Problema: Determinar si existe un camino entre dos vértices v1 y v2 de un grafo acíclico

Grafo acíclico: No hay riesgo de quedarse haciendo llamadas recursivas

Se trata como si fuera un árbol n-ario

Page 9: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclico

• Verificar si existe un camino a un vértice destino en un grafo acíclico (clase Vértice)

• Salida de la recursión: cuando el vértice actual (origen) coincide con el vértice destino

9

Page 10: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclico

• Verificar si existe un camino a un vértice destino en un grafo acíclico (clase Vértice)

• Recorre los arcos a sus sucesores

10

Page 11: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclico

• Verificar si existe un camino a un vértice destino en un grafo acíclico (clase Vértice)

• Obtiene el vértice sucesor

11

Page 12: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclico

• Verificar si existe un camino a un vértice destino en un grafo acíclico (clase Vértice)

• Verifica si hay camino desde el vértice sucesor hasta el destino final

12

Page 13: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo acíclico• Verificar si existe un camino a un vértice destino en un grafo

acíclico (clase Vértice)

• Después de haber recorrido todos los sucesores retorna falseindicando que no encontró el camino

13

Page 14: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Agenda

• Caminos en un grafo

• Caminos acíclicos

• Caminos con ciclos

• Clase Camino

• Camino entre dos vértices

• Camino más barato entre dos vértices y su costo

• Detección de ciclos

• ¿Hay ciclos desde un vértice?

• ¿El grafo es acíclico?

14

Page 15: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos

• ¿Y si hay ciclos ?

• ¿Hay camino entre V3 y V2 ?

• ¿V3.hayCaminoEnAciclico(v2) ?

15

v1 v2

V3

v4

v5

Page 16: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos

• ¿Hay camino entre V3 y V2 ?

16

v1 v2

V3

v4

v5

Page 17: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos

• ¿Hay camino entre V3 y V2 ?

• RECURSIÓN INFINITA

17

v1 v2

V3

v4

v5

Page 18: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos• ¿Hay camino entre V3 y V2 ?

• SOLUCIÓN: MARCAR

18

v1 v2

V3

v4

v5

Page 19: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos

• Cuando pase por v3 se marca, de forma tal que la siguientevez que se vaya a pasar por ahí, se ignora porque el vérticeya fue visitado

19

v1 v2

V3

v4

v5

Page 20: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos• Verificar si existe un camino a un vértice destino en un grafo con ciclos

(clase Vértice)

• Misma salida de la recursión: cuando el vértice actual (origen) coincide con el vértice destino

20

Page 21: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos• Verificar si existe un camino a un vértice destino en un grafo con ciclos

(clase Vértice)

• Marca el vértice para recordar que ya pasó por ahí

21

Page 22: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos• Verificar si existe un camino a un vértice destino en un grafo con ciclos

(clase Vértice)

• Recorre los arcos a sus sucesores

22

Page 23: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos

• Verificar si existe un camino a un vértice destino en un grafo con ciclos (clase Vértice)

• Obtiene el vértice sucesor

23

Page 24: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos• Verificar si existe un camino a un vértice destino en un grafo con

ciclos (clase Vértice)

1. Que el vértice sucesor no haya sido visitado previamente

2. Que haya camino desde el vértice sucesor hasta el destino final

24

Page 25: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Caminos en un grafo con ciclos

• Nuevos métodos en la clase Vértice para manejar las marcas

25

Page 26: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Agenda

• Caminos en un grafo

• Caminos acíclicos

• Caminos con ciclos

• Clase Camino

• Camino entre dos vértices

• Camino más barato entre dos vértices y su costo

• Detección de ciclos

• ¿Hay ciclos desde un vértice?

• ¿El grafo es acíclico?

26

Page 27: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Retornar el camino

• Problema: Determinar si existe un camino entre dos vértices v1 y v2 de un grafo y retornarlo.

• Nueva clase en Cupi2Collections para representar y manipular Caminos

27

Page 28: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Camino

• El vértice origen del camino es de tipo Vertice

28

Page 29: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Camino• Se declara un vector (arcos) que contiene los arcos del camino

29

Page 30: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Camino• Se declara el costo del camino

30

Page 31: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Camino• Se crea el camino a partir de un vértice origen

31

Page 32: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Camino

• Métodos empleados:• public Camino( Vertice<K, V, A> pOrigen )

• public void agregarArcoFinal( Arco<K, V, A> arco )

• public void agregarArcoComienzo( Arco<K, V, A>

nuevoArco )

• public void concatenar( Camino<K, V, A> camino )

• public void eliminarUltimoArco( )

• public void reiniciar( )

• public int darLongitud( )

• public int darCosto( )

• public Iterador<Vertice<K, V, A>>

darSecuenciaVertices( )

32

Page 33: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Agenda

• Caminos en un grafo

• Caminos acíclicos

• Caminos con ciclos

• Clase Camino

• Camino entre dos vértices

• Camino más barato entre dos vértices y su costo

• Detección de ciclos

• ¿Hay ciclos desde un vértice?

• ¿El grafo es acíclico?

33

Page 34: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Camino entre dos vértices (Clase Vértice)• Retornar un camino a un vértice destino

• Se retorna un objeto de tipo camino

34

Page 35: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Camino entre dos vértices (Clase Vértice)• Retornar un camino a un vértice destino

• Si es el vértice buscado retorna un camino nuevo con el vértice origen (sin arcos)

35

Page 36: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Camino entre dos vértices (Clase Vértice)• Retornar un camino a un vértice destino

• Marca el vértice para recordar que ya pasó por ahí.

36

Page 37: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Camino entre dos vértices (Clase Vértice)• Retornar un camino a un vértice destino

• Recorre los arcos sucesores

37

Page 38: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Camino entre dos vértices (Clase Vértice)• Retornar un camino a un vértice destino

• Obtiene el vértice sucesor

38

Page 39: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Camino entre dos vértices (Clase Vértice)• Retornar un camino a un vértice destino

• Verifica que el vértice sucesor no haya sido visitado previamente

39

Page 40: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Camino entre dos vértices (Clase Vértice)• Retornar un camino a un vértice destino

• Obtiene el camino desde el sucesor hasta el destino

40

Page 41: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Camino entre dos vértices (Clase Vértice)• Retornar un camino a un vértice destino

• Si encontró algún camino del sucesor al destino (!= null), adiciona el arco al inicio de la lista de arcos del camino y retorna el camino

41

Page 42: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Camino entre dos vértices (Clase Vértice)• Retornar un camino a un vértice destino

• Si al haber recorrido todos sus sucesores no encontró camino al destino retorna null

42

Page 43: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Agenda

• Caminos en un grafo

• Caminos acíclicos

• Caminos con ciclos

• Clase Camino

• Camino entre dos vértices

• Camino más barato entre dos vértices y su costo

• Detección de ciclos

• ¿Hay ciclos desde un vértice?

• ¿El grafo es acíclico?

43

Page 44: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Vértice• Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

• Parecido al problema anterior (darCamino), pero debe buscar TODOS los caminos posibles entre los dos vértices antes de retornar el camino (para estar seguro de retornar el de costo mínimo).

44

Page 45: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Qué pasa si usamos el dar Camino original ?

45

Camino de costo mínimo de v1 a v4 ?

Primer camino que encuentra: < v1, v2, v4> con costo 12. No es el de

menor costo !!!

v1

v2

V3

v4

5 7

2

2 12

v1

v2

V3

v4

5 7

2

2 12

Page 46: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Qué modificaciones hay que hacer?

1. Encontrar TODOS los caminos (junto con su costo) de v1 a v4 para seleccionar el menor.

• Obliga a hacer una llamada recursiva a cada sucesor no marcado y según el costo que retorne cada llamada, seleccionar el mejor.

2. Desmarcar el nodo v1 antes de abandonar el método:

• Es indispensable porque se puede dar el caso de que el camino buscado pase por el nodo v1, pero viniendo de otra llamada recursiva

46

Page 47: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Qué pasa si no se desmarca ?

47

Camino de costo mínimo de v1 a v4 ?

•Después de la primera recursión, v2 queda marcado.•Al buscar los caminos desde v1 que comiencen por v3, solo va a encontrar el camino <v1, v3, v4> , ignorando el camino de costo mínimo < v1, v3, v2, v4 > porque v2 estaba marcado.

v1

v2

V3

v4

5 7

2

2 12

v1

v2

V3

v4

5 7

2

2 12

Page 48: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Qué pasa si no se desmarca ?

48

•Después de la primera recursión, v2 queda marcado.•Al buscar los caminos desde v1 que comiencen por v3, solo va a encontrar el camino <v1, v3, v4> , ignorando el camino de costo mínimo < v1, v3, v2, v4 > porque v2 estaba marcado.

Es necesario desmarcar los nodos en todos los algoritmos que deban

identificar todos los posibles caminos entre dos puntos

v1

v2

V3

v4

5 7

2

2 12

Page 49: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Retornar el camino de costo mínimo a un vértice destino (clase Grafo)

• Complete el siguiente método

49

/**

* Retorna el camino más barato (de menor costo) entre el par

* de vértices especificados

* @param idVerticeOrigen Vértice en el que inicia el camino

* @param idVerticeDestino Vértice en el que termina el camino

* @return El camino más barato entre el par de vértices

* especificados

* @throws VerticeNoExisteException Si alguno de los dos

* vértices no existe

*/

public Camino darCaminoMasBarato( K idVerticeOrigen, K

idVerticeDestino ) throws VerticeNoExisteException {

// Borra todas las marcas presentes en el grafo

// Obtiene los vértices

// Le pide al vértice de origen que localice el camino

}

Page 50: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Retornar el camino de costo mínimo a un vértice destino (clase Grafo)

50

/**

* Retorna el camino más barato (de menor costo) entre el par

* de vértices especificados

* @param idVerticeOrigen Vértice en el que inicia el camino

* @param idVerticeDestino Vértice en el que termina el camino

* @return El camino más barato entre el par de vértices

* especificados

* @throws VerticeNoExisteException Si alguno de los dos

* vértices no existe

*/

public Camino darCaminoMasBarato( K idVerticeOrigen, K

idVerticeDestino ) throws VerticeNoExisteException {

// Borra todas las marcas presentes en el grafo

reiniciarMarcas();

// Obtiene los vértices

Vertice<K, V, A> verticeOrigen = darVertice( idVerticeOrigen );

Vertice<K, V, A> verticeDestino = darVertice( idVerticeDestino );

// Le pide al vértice de origen que localice el camino

return verticeOrigen.darCaminoMasBarato( verticeDestino );

}

Page 51: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Camino más corto (clase Vértice)

51

• Implemente el siguiente método

/**

* Devuelve el camino mas corto al vértice especificado

* @param destino Vértice destino

* @return Camino mas corto hacia el vértice especificado

*/

public Camino<K, V, A> darCaminoMasCorto( Vertice<K, V, A> destino )

{

//Si el origen y destino son iguales retorne un camino con el

//vértice actual

//De lo contrario:

//Marque el vértice actual

//Pida los arcos sucesores

//Recorra los sucesores

//Por cada arco obtenga el vértice y si no esta marcado llame la

//recursión.

//Si el camino anterior existe y (no ha encontrado el camino más corto o

//la longitud del camino actual es menor que la longitud del camino más

//corto que llevaba -> Actualice el camino mas corto y el arco.

//Después de recorrer todos los arcos desmarque

//Si el camino no existe retorne null

//Si el camino existe agregue el arco al camino y retórnelo

}

Page 52: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Vértice• Retornar el camino con menor costo a un vértice destino

• Se declaran variables auxiliares donde se guarda la información del último hasta el momento

52

Page 53: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Vértice• Retornar el camino con menor costo a un vértice destino

• Se hace el mismo ciclo anterior verificando que el vértice sucesor no esté marcado

53

Page 54: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Vértice• Retornar el camino con menor costo a un vértice destino

• Se calcula recursivamente el camino más barato desde el sucesor hasta el destino

54

Page 55: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Vértice• Retornar el camino con menor costo a un vértice destino

• Se verifica que el vértice sucesor encuentre su propio camino más barato

55

Page 56: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Vértice• Retornar el camino con menor costo a un vértice destino

• Se calcula el costo de ese camino, incluyendo el arco al nodo sucesor

56

Page 57: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Vértice• Retornar el camino con menor costo a un vértice destino

• Si el nuevo costo es menor que el menor hasta el momento (o si es la primera vez), se actualizan los valores de las variables auxiliares.

57

Page 58: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Clase Vértice• Retornar el camino con menor costo a un vértice destino

• Después de haber recorrido TODOS los vértices sucesores:

• Se desmarca

• Verifica si encontró camino mínimo. En este caso, añade el arco que lleva al vértice origen de ese camino

58

Page 59: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Agenda

• Caminos en un grafo

• Caminos acíclicos

• Caminos con ciclos

• Clase Camino

• Camino entre dos vértices

• Camino más barato entre dos vértices y su costo

• Detección de ciclos• ¿Hay ciclos desde un vértice?

• ¿El grafo es acíclico?

59

Page 60: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

¿Hay un ciclo desde un vértice?

• Implementar el siguiente método:

• ¿En qué clase va este método ?

60

Ayuda: Utilice el método hayCamino( )

Page 61: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

¿Hay un ciclo desde un vértice?

• Implementar el siguiente método:

• ¿En qué clase va este método ?

61

Page 62: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Agenda

• Caminos en un grafo

• Caminos acíclicos

• Caminos con ciclos

• Clase Camino

• Camino entre dos vértices

• Camino más barato entre dos vértices y su costo

• Detección de ciclos

• ¿Hay ciclos desde un vértice?

• ¿El grafo es acíclico?

62

Page 63: NIVEL 17: ESTRUCTURAS NO LINEALES · Clase Vértice •Problema: ¿Cómo retornar el camino de costo mínimo entre dos vértices v1 y v2 de un grafo dirigido que puede tener ciclos?

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

¿El grafo es acíclico ?

• Implementar un método que diga si el grafo es acíclico.

• En qué clase va este método ?

Ayuda: Utilice el método hayCamino( )

63