Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Grafos Ver2
Grafos Ver2
Tema 4. Grafos.
4.1. Introducción, notación y definiciones.
4.2. Representación de grafos.
4.3. Problemas y algoritmos sobre grafos.
4.3.1. Recorridos sobre grafos.
4.3.2. Árboles de expansión mínimos.
4.3.3. Problemas de caminos mínimos.
4.3.4. Algoritmos sobre grafos dirigidos.
4.3.5. Algoritmos sobre grafos no dirigidos.
4.3.6. Otros problemas con grafos.
en C. José Andrés Vázquez Flores 1
Alg. y Est. Dat.
4.1.1. Ejemplos de grafos.
• Ejemplo: Grafo de carreteras entre ciudades.
Coruña Oviedo 304
17 1 Bilbao
45
5
32
0
28
Vigo 356 Gerona
4
Zaragoza 0
10
3 95
296
5 Barcelona
32
19
Valladolid
9
34
Madrid
3 25
40 1
19 1 Valencia
335
Badajoz Albacete
2 41
Jaén 15
0
2
24 Murcia
99
Sevilla 25 6 2 78
5
12
Cádiz Granada
b
b
inicio a b b
0 1 2 3
a
a a
Problemas
• ¿La expresión: a b b a b a b b b a, es una
expresión válida del lenguaje?
• ¿Cuál es la expresión válida más corta?
• Transformar el grafo en una expresión regular y
viceversa.
Licencia
6
de obras
Aplanar Comprar
4 piedras
2
terreno
Hacer Cincelar
3 8
camino piedras
Pintar Colocar
3 9
pirámide piedras
Problemas
• ¿En cuanto tiempo, como mínimo, se puede
construir la pirámide?
• ¿Cuándo debe empezar cada tarea en la
planificación óptima?
• ¿Qué tareas son más críticas (es decir, no pueden
sufrir retrasos)?
• ¿Cuánta gente necesitamos para acabar las
obras?
5 7
6
Modelo 2
a b
c e
d
Problemas
• ¿Cuántos grupos hay en la escena?
• ¿Qué objetos están visibles en la escena y en qué
posiciones?
• ¿Qué correspondencia hay entre puntos del
modelo y de la escena observada?
• ¿Qué objetos son isomorfos?
45
5
b
32
0
Vigo 356
28
Zaragoza Gerona
4
0
10 b
395
296
5 Barcelona
Valladolid 32
19
3 inicio a b b
9
34
Madrid 0 1 2
403
25
1
3
191 Valencia
335
Badajoz Albacete a
241
Jaén
150
42
Sevilla 2 25 Murcia
99
6 278 a a
5
12
Cádiz Granada
A|6
B|4 C|2
D|3 E|8
F|9
G|3
en C. José Andrés Vázquez Flores 10
Alg. y Est. Dat.
4.1. Introducción y definiciones.
• Un grafo G es una tupla G= (V, A), donde V es un
conjunto no vacío de vértices o nodos y A es un
conjunto de aristas o arcos.
• Cada arista es un par (v, w), donde v, w V.
Tipos de grafos
• Grafo no dirigido. v w
Las aristas no están ordenadas:
(v, w) = (w, v)
• Grafos dirigidos (o digrafos).
Las aristas son pares ordenados: v w
<v, w> <w, v>
<v, w> w = cabeza de la arista, v = cola.
en C. José Andrés Vázquez Flores 11
Alg. y Est. Dat.
Grafo no dirigido
1 2 3 G = { V = {1.2,3,4,5,6,7}
A = { (1,2),(1,4),(1,6),(2,4),(2,5),
5 (3,5),(3,7),(4,7),(5,7) }
4
}
6 7
Grafo dirigido
1 2 3
G = { V = {1.2,3,4,5,6,7}
A = { <1,2>,<1,4>,<1,6>,<2,1>,<2,3>, 4 5
<3,1>,<3,7>,<4,2>,<5,2>,<7,4>,<7,7>)
6 7
}
}
en C. José Andrés Vázquez Flores 12
Alg. y Est. Dat.
4.1.2. Terminología de grafos.
• Nodos adyacentes a un nodo v: todos los nodos
unidos a v mediante una arista.
• En grafos dirigidos:
– Nodos adyacentes a v: todos los w con <v, w> A.
– Nodos adyacentes de v: todos los u con <u, v> A.
b
b
inici a b b
0 1 2 3
o
a
a a 1
3
0
2
2 4
4 2 3
1 2 3
4 5
6 7
8
Camino de 4 a 3:
Camino de 3 a 1:
Ciclo:
Ciclo Simple:
1 2
4 5
– Mediante
1
listas 2de adyacencia.
3
2 3 5
3 1 4 5
4
5 4
Ventajas
• Representación y operaciones muy sencillas.
• Eficiente para el acceso a una arista dada.
Inconvenientes
• El número de nodos del grafo no puede cambiar.
• Si hay muchos nodos y pocas aristas (a<<n2) se
desperdicia mucha memoria (matriz escasa).
en C. José Andrés Vázquez Flores 24
Alg. y Est. Dat.
4.2.2. Listas de adyacencia.
tipo Nodo= entero (1..n)
tipo GrafoNoEtiq= array [1..n] de Lista[Nodo]
• Sea R de tipo GrafoNoEtiq, G= (V, A).
• La lista R[v] contiene los w tal que (v, w) A.
1 1 2 4
1 2 2 1 2 3 5
3 2 4
3
4 1 3 5
4 5 5
2 4
Ventajas
• Más adecuada cuando a<<n2.
Inconvenientes
• Representación más compleja.
• Es ineficiente para encontrar las aristas que llegan
a un nodo.
en C. José Andrés Vázquez Flores 27
Alg. y Est. Dat.
4.2.3. Listas múltiples de adyacencia.
• Alternativa: Usar estructuras de listas múltiples.
– Lista de arcos
a b
de salida. 1 2
– Lista de arcos c
de entrada d e
3
registros
array de
nodos de aristas
1 a c d
2 b e
sig_sal
valor
sig_ent
3
lista_ent lista_sal
var
marca: array [1, ..., n] de (visitado, noVisitado)
operación BorraMarcas
para i:= 1, ..., n hacer
marca[i]:= noVisitado
operación BúsquedaPrimeroEnProfundidad
BorraMarcas
para v:= 1, ..., n hacer
si marca[v] == noVisitado entonces
bpp(v)
finpara
en C. José Andrés Vázquez Flores 32
Alg. y Est. Dat.
4.3.1.1. Búsqueda primero en profundidad.
• El recorrido no es único: depende del nodo inicial
y del orden de visita de los adyacentes.
• El orden de visita de unos nodos a partir de otros
puede ser visto como un árbol: árbol de
expansión en profundidad asociado al grafo.
• Si aparecen varios árboles: bosque de expansión
en profundidad.
1 2
• Ejemplo. 4
Grafo
7
no 3
6 9
dirigido. 5
8
en C. José Andrés Vázquez Flores 33
Alg. y Est. Dat.
4.3.1.1. Búsqueda primero en profundidad.
• Bosque de expansión en profundidad
1 1º 4 7º
2º
2
5 8º
3º 7 6º Arcos del
6
árbol
9 9º
3 4º 8 5º
Arcos no
del árbol
Arco de
Arco de retroceso c 3º
Arco de
cruce avance
e
d d 4º
a e 5º
V =A W =B,C,D,H
V =B W =A,C,D,E,G,H
V =C W =A,B,E,F,G
marcas V V V V V V V V V =E W =B,C,D,G
A B C D E F G H
V =D W =A,B,E,H
Orden
visitado 1 2 3 5 4 7 8 6
V =H W =A,B,D,F,G
A,B,C,E,D,H V =F W =C,H
H:F,G
V =G W =B,C,E,H
operación BúsquedaPrimeroEnAnchura
BorraMarcas
para v:= 1, ..., n hacer
si marca[v] = noVisitado entonces
bpa(v)
en C. José Andrés Vázquez Flores 41
Alg. y Est. Dat.
4.3.1.2. Búsqueda primero en anchura (o amplitud).
operación bpa (v: Nodo)
var C: Cola[Nodo]
x, y: Nodo
marca[v]:= visitado
InsertaCola (v, C)
mientras NOT EsVacíaCola (C) hacer
x:= FrenteCola (C)
SuprimirCola (C)
para cada nodo y adyacente a x hacer
si marca[y] == noVisitado entonces
marca[y]:= visitado
InsertaCola (y, C)
finsi
finpara
finmientras
en C. José Andrés Vázquez Flores 42
Alg. y Est. Dat.
4.2.2. Listas de adyacencia.
tipo Nodo= entero (1..n)
tipo GrafoNoEtiq= array [1..n] de Lista[Nodo]
• Sea R de tipo GrafoNoEtiq, G= (V, A).
• La lista R[v] contiene los w tal que (v, w) A.
1 1 2 4
1 2 2 1 2 3 5
3 2 4
3
4 1 3 5
4 5 5
2 4
2 2º 3 3º
8º 9º
5 9
6 4º
7 5º
Arcos de
8 6º cruce
c 3º e 4º
e
d d 5º
Cola
X=F,C,H,A,B,E,G,D
Y=C,H,A,B,E,F,G,A,B,D,F,G,B,C,D,H,A,C,D,E,
G,H,B,C,D,G,B,C,E,H,A,B,E,H
V=F
marcas V V V V V V V V
A B C D E F G H
Orden F:C,H
visitado 4 5 2 8 6 1 7 3
C:ABEG
H:D
3 6 9 5
7
6 2
1
3
5 4
5
1 2
3
2
3 6 2
1
5 3
5 4
5
6
4
6
1 2
3
2
3 6 2
1
5 3
5 4
5
6
4
6
45
5
32
0
Vigo
28
356 Gerona
Zaragoza
4
0
10
395
2 96
5 Barcelona
32
19
Valladolid
3
9
34
Madrid
3 25
40 1
191 Valencia
335
2
24 Murcia
99
Sevilla 256 2 78
5
12
Granada
Cádiz
en C. José Andrés Vázquez Flores 62
Alg. y Est. Dat.
4.3.3.1. Caminos mínimos desde un origen.
Algoritmo de Dijkstra
• Supongamos un grafo G, con pesos positivos y un
nodo origen v.
8 5
1 Nodo S D P
2 8
1 2 F 1 1
4 1 4
3 3 F 1
2
1 7 4 F 1
3 3 1
2 5 F 1
8 5 6 6 F 1
2
7 F 4 1
Posibilidades
• Aplicar el algoritmo de Dijkstra n veces, una por
cada posible nodo origen:
– Con matrices de adyacencia: O(n3)
– Con listas de adyacencia: O(a·n·log n)
• Aplicar el algoritmo de Floyd:
– Con listas o matrices: O(n3)
– Pero más sencillo de programar...
Algoritmo de Floyd
D:= C
para k:= 1, ..., n hacer
para i:= 1, ..., n hacer
para j:= 1, ..., n hacer
D[i, j]:= min ( D[i, j] , D[i, k] + D[k, j] )
i j
D[i, j]
• Camino mínimo entre i y j, en el paso k:
– Sin pasar por k: D[i, j]
– Pasando por k: D[i, k] + D[k, j]
– Nos quedamos con el menor.
• Ojo: Falta indicar cuáles son los caminos mínimos.
• P: array [1..n, 1..n] de entero. P[i, j] indica un nodo
intermedio en el camino de i a j.
i ... P[i, j] ... j
2 D 1 2 3
8
1 0 8 2
3
2 2 3 0
1 2 5
3 6 2 0
6 3
P 1 2 3
1 0 0 0
• Calcular el camino
2 0 0 0
mínimo entre 1 y 2.
3 0 0 0
en C. José Andrés Vázquez Flores 79
Alg. y Est. Dat.
4.3.3.3. Cierre transitivo de un grafo.
• Problema: Dada una matriz de adyacencia M (de
boolenos) encontrar otra matriz A, tal que A[i, j] es
cierto si y sólo si existe un camino entre i y j.
Algoritmo de Warshall
• Es una simple adaptación del algoritmo de Floyd a
valores booleanos.
A:= M
para k:= 1, ..., n hacer
para i:= 1, ..., n hacer
para j:= 1, ..., n hacer
A[i, j]:= A[i, j] OR (A[i, k] AND A[k, j])
Definición:
• Un componente conexo de un grafo G es un
subgrafo maximal y conexo de G.
• En grafos dirigidos: Componente fuertemente
conexo. Existen caminos entre todos los pares de
nodos y en los dos sentidos.
• Problema: Dado un grafo, calcular sus
componentes (fuertemente) conexos.
3 6 9 5
7
B D
C E
A, B, C D, E
* Hacer
3
Cincelar
8
D camino piedras
A B
Pintar Colocar
9
(A+B)*(D+D*(A+B)) pirámide
3 piedras
Aplanar Comprar
2 terreno
4 3 piedras
2
Hacer Cincelar
4 camino
3
5 piedras
8
Pintar Colocar
7 pirámide
3 piedras
9 6
1 8 2 5
3
9 4
7 6
1
2 3
4
5 6
7
• Pregunta: ¿Es posible dibujar estas figuras con un
bolígrafo, pintando cada línea una sola vez, sin levantar el
bolígrafo y acabando donde se empezó?
en C. José Andrés Vázquez Flores 100
Alg. y Est. Dat.
4.3.5.2. Caminos y circuitos de Euler.
• El problema se transforma en un problema de grafos.
• Circuito de Euler: Es un ciclo (no necesariamente simple)
que visita todas las aristas exactamente una vez.
• Si puede empezar y acabar en nodos distintos: Camino de
Euler. 1
2 3
4
5 6
7
• Condiciones necesarias y suficientes para que exista
un circuito de Euler:
– El grafo debe ser conexo.
– Todos los nodos deben tener grado par, ya que el
camino entra y sale de los nodos.
• ¿Y para los caminos de Euler?
G 2 F 2
5 b d 2 b d
3 3
s 1 4 t s 1
0 t
3 2 4 3 2 2
a c a c
3 4 3 4
5 6 5 6
25
25
5 30
3
50
4 15
45
55 55
40 40
25
25
25
25
5 30 30
3 5 3
50 50
4 15 4 15
• Modelamos el
problema con una
representación de
grafos.
ERIADOR
COMARCA ROHAN
GONDOR MORDOR
Isomorfismo
• Definición: Dos grafos G= (VG, AG) y F= (VF, AF) se dice
que son isomorfos si existe una asignación de los nodos
de VG con los nodos de VF tal que se respetan las aristas.
• Isomorfismo entre grafos. El isomorfismo es una función:
a : VG → VF, biyectiva tal que
(v, w) AG (a(v), a(w)) AF
3 5 3
7
5 6 2
4