Professional Documents
Culture Documents
Teora de Grafos
2.1
Introducci
on: grafos y digrafos
En terminos generales, un grafo consiste en un conjunto de puntos, que llamaremos vertices, y lneas
que unen los vertices, que denominaremos aristas.
Los grafos se estan convirtiendo en herramientas poderosas de m
ultiples disciplinas: ingeniera
electrica y civil, redes de comunicacion, computacion, economia, sociologa, etc. Tanto por su simplicidad como modelo de muy variadas situaciones, como secillez para dar solucion a los problemas, en
muchos casos en forma de algoritmos computables en ordenador.
Aparecen en diferentes campos bajo denominaciones distintas: redes en ingeniera electrica,
estructuras moleculares en qumica, mapas de carreteras, sociogramas, redes de telecomunicaciones, etc. El modelado es simple tomando los objetos (lugares, aparatos, personas, . . . ) como
vertices y las conexiones (cables, relaciones, tratos, . . . ) como aristas.
Ejemplo 1.- En la ciudad de Konigsberg, existen siete puentes que unen las riberas y dos islas formadas por el ro Pregel,
de la forma que indica el dibujo. Hay alguna forma de recorrer los siete puentes y volver al punto de partida, sin cruzar
dos veces por el mismo puente?
s
$
El grafo que aparece sobre el dibujo modela esa situacion: cuatro puntos, que representan las
partes de tierra firme y las lneas que los unen, representando los puentes. El problema se reduce a
saber si pueden recorrerse todas las lneas sin repetir ninguna y acabar en el mismo punto.
Cuando se planteo esa pregunta a Euler ingenio la teora de grafos y probo los primeros resultados
antes de dar su respuesta: no.
Definici
on 2.- Un grafo esta formado por un par de conjuntos finitos, y se denota por G = (V, A),
donde V es el conjunto de v
ertices y A es el conjunto de aristas.
Cada arista de a A conecta dos vertices de V , que llamaremos extremos de la arista, y escribiremos a = {x, y} para indicar que a conecta o une los vertices x e y . Diremos entonces que x e y
son adyacentes por a.
En un grafo podemos encontrarnos lazos (aristas cuyos extremos coinciden), aristas m
ultiples (m
as
de una arista conectando los mismos vertices) y vertices aislados (no estan conectados a ning
un otro
vertice).
Pero tambien podemos hablar de grafos dirigidos donde cada arista tiene una direccion de recorrido;
modelos para una distribucion de agua por la red de tuberias de la ciudad, la red viaria con calles de
sentido u
nico, etc., son ejemplos de grafos dirigidos.
Definici
on 3.- Un digrafo o grafo dirigido esta formado por un par de conjuntos finitos, y lo
denotaremos por D = (V, A), donde V es el conjunto de v
ertices y A es el conjunto de arcos o
aristas dirigidas entre los vertices.
Cada arco a A conecta dos vertices de V , que llamaremos respectivamente extremo inicial y
extremo final del arco, y escribiremos a = (x, y) para indicar que a conecta o une el vertice x con el
vertice y . Diremos tambien que x es adyacente a y y que a incide en y .
Matlab 6.1.
21
Si los grafos se representan con puntos y lneas que los unen, los digrafos se representan con puntos
y flechas entre ellos.
Desgraciadamente no hay una nomenclatura estandar para designar los tipos de grafos ni los elementos que aparecen, por lo que es preciso fijarla y tenerlo presente al consultar cualquier bibliografa
sobre el tema.
Los grafos se clasifican por ser dirigidos o no, y por tener aristas/arcos m
ultiples y lazos. De un
grafo sin aristas m
ultiples ni lazos se suele decir que es simple. Nosotros trabajaremos siempre con
grafos simples.
Notaci
on 4.- Llamaremos grafos a los no dirigidos, sin aristas m
ultiples ni lazos (grafos no dirigidos
simples), y digrafos a los dirigidos, sin arcos m
ultiples ni lazos dirigidos (grafos dirigidos simples).
Si G = (V, A) es un grafo, con V = {v1 , v2 , . . . , vn }, escribiremos {vi , vj } o {vj , vi } para denotar
la arista que une ambos vertices.
Si D = (V, A) es un digrafo, denotaremos por (vi , vj ) el arco que conecta vi con vj .
Observaciones 5.? En un grafo solo puede haber una arista entre los mismos dos vertices, y en
un digrafo puede haber hasta dos arcos pero de sentidos contrarios.
Si un grafo tiene n vertices, en cada vertice pueden incidir a lo mas n 1 aristas. Si es un
digrafo, de cada vertice pueden salir a lo mas n 1 arcos y pueden incidir en el n 1 arcos
como mucho.
? Un grafo (no dirigido) puede considerarse tambien como un digrafo, sin mas que cambiar cada
arista por dos arcos de sentidos contrarios.
t
K
-t
-t
=
Ut
t?
t
t?
Definici
on 6.- Un subgrafo (subdigrafo) de un grafo (digrafo), es un grafo (digrafo) formado con
vertices y aristas (arcos) del inicial.
Es decir, se obtienen eliminando aristas y/o vertices del inicial (si se elimina un vertice, tambien
deben eliminarse todas las aristas incidentes en el).
2.1.1
Un grafo o un digrafo D = (V, A) puede tambien describirse mediante una tabla o matriz que indique
las conexiones:
Definici
on 7.- Si D tiene n vertices, se llama matriz de adyacencia de D a la matriz cuadrada de
orden n, M = (mij )nn , donde mij = 1 si el arco (vi , vj ) A, y mij = 0 en otro caso.
Si G es no dirigido, su matriz de adyacencia es simetrica (si la arista {vi , vj } esta en A, tambien
esta {vj , vi }).
Si el grafo o digrafo es simple es nuestro caso, la diagonal esta formada por ceros (no tiene lazos).
v3
s
6
R s
v1
- s v4
s?
v2
v1
M = v2
v3
v4
v1
0
1
1
0
v2
0
0
0
1
v3
1
0
0
0
v4
1
0
1
0
v3
s
@
@
s v4
@
s
v1
@
@
@s
v2
0
1
M =
1
1
1
0
1
0
1
1
0
0
1
0
0
0
Matlab 6.1.
22
Si para formar un subgrafo eliminamos solo aristas, su matriz de adyacencia se forma cambiando
el 1 por un 0 en las posiciones correspondientes; pero si se elimina un vertice, debemos eliminar la fila
y la columna correspondientes a ese vertice en la matriz.
En un grafo el n
umero de unos en cada fila o columna es el n
umero de aristas incidentes en el
vertice correspondiente a esa fila o columna; mientras que en un digrafo, el n
umero de unos de cada
fila se corresponde con el n
umero de arcos salientes desde ese vertice y el n
umero de unos de cada
columna indica el numero de arcos que llegan a ese vertice.
Definici
on 8.- En un grafo no dirigido, el n
umero de aristas incidentes en un vertice se denomina
grado del vertice, gr(v).
En un digrafo, se denomina ingrado de un vertice al n
umero de arcos incidentes en un vertice,
ing(v), y exgrado al n
umero de arcos salientes del vertice, exg(v).
? Si G es un grafo con n vertices y m aristas, no es dificil comprobar que
n
P
gr(vi ) = 2m.
i=1
n
P
ing(vi ) =
i=1
2.1.2
n
P
exg(vi ) = m.
i=1
Ejercicios
1.1 La zona Z-72 de gestion de carreteras se ocupa de la red viaria entre las 6 ciudades del a
rea.
Hay carretera entre A y C , A y E , B y C , B y D , B y F , C y D , C y E , y entre E y D .
(a) Dibujar un grafo para modelar esta situacion.
(b) En una redistribucion zonal, la ciudad B pasa a depender de la nueva zona Z-80, y las
carreteras que la unan con las ciudades de la Z-72 pasan a depender de la Interzonal 3.
Que grafo describira la nueva situacion de la Z-72? Hay alguna peculiaridad rese
nable?
(c) Si es C , en lugar de B , quien pasa a depender de la Z-80, que grafo describira entonces
la nueva situacion de la Z-72? Hay alguna peculiaridad rese
nable?
(d) Obtener la matriz M de adyacencia del grafo inicial y las matrices M1 y M2 de los subgrafos
construidos en los apartados anteriores. Como se reflejan en las matrices las peculiaridades
observadas antes?
Introducir en el ordenador como M la matriz de adyacencia del grafo.
[i] Encuentra los vertices adyacentes a B y los adyacentes a D .
[ii] Construir a partir de ella las matrices M1 y M2 de los subgrafos obtenidos en ese ejercicio.
Hacerlo de dos formas: eligiendo los elementos que las forman y eliminando los que sobran.
[iii] Calcular el grado de cada vertice, calcular el n
umero de aristas y comprobar que es cierta
la igualdad
n
P
gr(vi ) = 2m.
i=1
Matlab 6.1.
0
1
M =
0
0
0
0
0
0
1
0
0
1
0
0
0
1
0
0
0
1
0
0
1
0
0
1
0
0
0
0
0
1
0
23
(d) Si la respuesta al apartado anterior es afirmativa, indicar los cambios necesarios para resolver el problema. Estudiar todas las posibilidades de solucion y resaltar las que requieran
un menor n
umero de cambios.
Introducir en el ordenador la matriz de adyacencia del digrafo como una matriz dispersa S.
[i] Construir la matriz M a partir de ella.
[ii] Hallar la traspuesta y comprobar que es distinta de M.
[iii] Implementar una bifurcacion que nos diga si una matriz es o no cuadrada, y otro que nos
diga si es simetrica.
[iv] Construir una matriz de tres columnas que por filas tenga el vertice, su ingrado y su
exgrado.
[v] Obtener la matriz M1 del digrafo resultante de cerrar la plaza B al trafico.
[vi] Si es el caso, obtener la matriz M2 que resuelva el problema del trafico.
[vii] Construir a partir de M, mediante operaciones con matrices (y no por elementos), la matriz
A correspondiente a hacer todas las calles de doble direccion.
[viii] Que operador relacional usaras para comprobar que los arcos que figuran en M siguen
estando en A?
2.2
La estructura de un grafo, como puntos conectados, sugiere recorridos o desplazamientos por un grafo.
Es decir, en un grafo G = (V, A), podemos ir desde un vertice v1 recorriendo aristas hasta llegar a
otro vertive vk . As:
Definici
on 9.- Sea G = (V, A) un grafo. Llamaremos trayectoria en G a una sucesion de vertices,
x1 x2 xp1 xp tales que {xi , xi+1 } A, para cada i = 1, 2, . . . , p 1.
Diremos que la trayectoria conecta o une el vertice x1 y el vertice xp , y del n
umero de aristas
recorridas, p 1, diremos que es la longitud de la trayectoria.
Si x1 = xp se dice que la trayectoria es cerrada.
No hemos puesto ninguna restriccion al recorrido de la trayectoria (salvo que use aristas del grafo),
podramos deambular por el grafo recorriendo siempre las mismas aristas y pasando por los mismos
vertices. Es usual distinguir otros dos tipos de trayectorias.
Definici
on 10.- Llamaremos cola a una trayectoria que recorre aristas distintas y camino a una
trayectoria sin vertices repetidos (luego tampoco aristas).
De una cola cerrada se dice que es un circuito y de un camino cerrado que es un ciclo.
Nota: Las denominaciones de trayectoria, cola, circuito y camino difieren de unos autores a otros,
mientras que la de ciclo es mas com
un; en cualquier caso, y como ya comentamos, conviene comprobar
c
omo denomina cada autor estos elementos.
Los caminos y ciclos son elementos imprescindicles en la teora de grafos tambien en la parte que a
nosotros nos ocupa. Las siguientes definiciones establecen unas tipologas de grafos muy importantes:
Definici
on 11.- Diremos que un grafo es acclico si no tiene ciclos.
Definici
on 12.- Un grafo es conexo si todo par de vertices esta unido por una trayectoria (por un
camino).
Matlab 6.1.
24
Si el grafo no es conexo, esta formado por varios trozos que s son conexos. De cada uno de estos
trozos se dice que es una componente conexa del grafo. En otras palabras, un grafo es conexo si
desde un vertice se puede ir a todos los demas. Si el grafo no es conexo un vertice solo esta conectado
con los de su misma componente conexa.
Aunque no todas las trayectorias son caminos, el siguiente resultado nos asegura que siempre
podremos disponer de uno si es necesario (y explica el parentesis en la definicion de conexion).
Proposici
on 13.- Cada trayectoria que une dos vertices distintos contiene un camino que une esos
mismos vertices.
Demostracion:
Sea T una trayectoria que une el vertice vr y el vertice vs . Si T no es un camino, repite vertices.
Cuando recorremos T , si pasamos por un vertice vi y este nos aparece mas adelante en la trayectoria,
nos encontramos en el mismo punto que la primera vez que pasamos por el, luego si eliminamos
el paseo intermedio seguimos teniendo una trayectoria que une el vertice vr y el vertice vs . Si
repetimos el proceso hasta que no queden vertices repetidos tenemos el camino postulado.
De igual manera se tiene que:
Proposici
on 14.- Cada circuito que empieza y acaba en un vertice vr contiene un ciclo que empieza
y acaba en ese vertice vr .
(El resultado es por supuesto valido para cada vertice de un circuito.)
2.2.1
Trayectorias y matrices
La matriz M , de adyacencia de un grafo, indica las aristas entre vertices, que son tambien las trayectorias de longitud 1 posibles entre vertices. As, la matriz M 2 = M M indica, en cada posici
on,
el n
umero de trayectorias de longitud 2 entre los vertices correspondientes, es decir, si en la posici
on
(i, j) hay un 3, tenemos
distintas desde el vertice vi al vertice vj .
tres trayectorias
0 1 1 1
1 0 1 0
En efecto, si M =
es la matriz de un grafo, el elemento (1, 3) de M 2 se obtiene de
1 1 0 1
1 0 1 0
operar la fila 1 de M con la columna 3 de M . Entonces (ponemos con cada elemento de la matriz su
significado como arista),
v1 v2
v1 v3
v1 v4
1
1
v1 v3
v2 v3
= 0 1+ 1 1 +1 0+ 1 1 = 2
v1 v2 v3
v1 v4 v3
6
6
v4 v3
v2 v1
v2 v3
1
0
1
0
v1 v2
6
v3 v2
11
v2 v1 v2
+0 0+
6
11
v2 v3 v2
+0 0 = 2
6
25
2.2.2
Algoritmos de conexi
on de un grafo
Usando las potencias de la matriz de adyacencia puede estudiarse la conexion de un grafo de manera
eficaz, pero poco eficiente desde el punto de vista del computo operacional. Yendo a la definici
on de
conexion (existencia de caminos entre cada par de vertices) y construyendo nuevos caminos a partir
de los ya existentes se obtienen mejores algoritmos para probarlo. El mas sencillo, y que sirve como
base a otros interesantes algoritmos es el algoritmo de Warsall.
2.2.2.1
El algoritmo de Warsall
26
Algoritmo de Floyd
El algoritmo trabaja con operaciones logicas para determinar la conexion o no entre los vertices,
pero cambiando el tipo de elementos y operadores usados se ha adaptado para otras cuestiones. Por
ejemplo, puede modificarse ligeramente para encontrar la longitud (en el sentido de menor n
umero de
aristas) del camino mas corto entre dos vertices conectados: si hay un camino entre los vertices vi y
vj y se puede formar otro uniendo dos que pasen por alg
un vertice vk , elegimos el mas corto de los
dos.
Para ello hay que sustituir la matriz de adyacencia M , por otra matriz L (de longitud de alcance)
que almacena las longitudes de los caminos entre los vertices, de la siguiente manera:
un vertice esta a alcance 0 de si mismo (0 en la diagonal),
los vertices conectados por una arista estan a alcance 1 y
los vertices no conectados directamente estan a alcance .
Se trata pues de ir minorando los valores de la matriz; para ello realizamos las mismas comprobaciones
que realiza Warsall con un peque
no cambio: en cada paso tomaremos como nuevo valor de la matriz
de alcance el valor
mn L(k1) (i, j) , L(k1) (i, k) + L(k1) (k, j)
(es decir, tomamos como longitud la del camino mas corto entre el que tenemos y el que se pueda
formar uniendo dos caminos).
La matriz final del algoritmo contendra en cada posicion la logitud del camino mas corto entre
cada par de vertices (y cero en la diagonal). Si dos vertices no pueden conectarse figurara el valor
(inf en Matlab), por lo que el grafo sera conexo si no existe ning
un valor en la matriz final.
2.2.3
Trayectorias y conexi
on en un digrafo
Para los grafos dirigidos, las trayectorias, colas, caminos, circuitos y ciclos, se definen de forma analoga.
La diferencia estriba en que los arcos solo se pueden recorrer en un sentido, por lo que las trayectorias
(colas, ciclos, etc.) son siempre trayectorias dirigidas que se recorren en el sentido que indica la flecha.
Definici
on 16.- Sea D = (V, A) un digrafo. Llamaremos trayectoria (dirigida) en D a una sucesi
on
de vertices, x1 x2 xp1 xp tales que (xi , xi+1 ) A, para cada i = 1, 2, . . . , p 1.
Diremos que la trayectoria conecta o une el vertice x1 con el vertice xp , y del n
umero de arcos
recorridos, p 1, diremos que es la longitud de la trayectoria. Si x1 = xp se dice que la trayectoria
es cerrada.
Llamaremos cola a una trayectoria con todos los arcos distintos y circuito a una cola cerrada.
Llamaremos camino a una trayectoria sin vertices repetidos y ciclo a un camino cerrado.
Todas las definiciones y resultados vistos en el apartado anterior (aciclicidad, matrices y su significado,
etc.) tienen su analogo para digrafos sin mas que tener en cuenta que todos los elementos han de ser
dirigidos, excepto uno: la definicion de conexo.
Definici
on 17.- Sea D un digrafo. Se llama grafo no dirigido subyacente a D , al grafo que se obtiene
sustituyendo cada arco (x, y) por la arista {x, y} (si aparecen (x, y) e (y, x) se sustituyen ambos por
una sola arista).
Definici
on 18.- Un digrafo es conexo si su grafo subyacente es conexo.
Matlab 6.1.
27
En general, los resultados validos para grafos o digrafos los son tambien para los otros, salvo
aquellos que se basan directamente en la existencia o no existencia de direcciones (como la conexi
on).
As, el algoritmo de Floyd para calcular la menor longitud de un camino entre vertices, comentado
antes, funciona perfectamente con digrafos:
Algoritmo 2.- (de Floyd) inicio: n; L; L(0) = L
para k = 1 hasta n
para j = 1 hasta n
para i = 1 hasta n
L(k) (i, j) = min L(k1) (i, j), L(k1) (i, k) + L(k1) (k, j)
fin
fin
fin
Donde L se obtiene a partir de la matriz de adyacencia, poniendo para i 6= j sin arco entre ellos
L(i, j) = . Si en la matriz final algunas posiciones mantienen el valor , quiere decir que no puede
irse de un vertice al otro (no hay camino).
Nota: En un grafo no dirigido la conexion asegura que se puede ir desde cualquier vertice a cualquier
otro, pero en los digrafos conexos puede haber perfectamente vertices no conectados por caminos
dirigidos (que no haya camino de vi a vj ni camino de vj a vi ). En el
v1
v
v3
v
v5
s - s2
s - s4
s
digrafo de la derecha, v1 solo se conecta con v2 , v2 no se conecta con
ning
un otro, etc.
2.2.4
Ejercicios
v2
s
@
@
@
v1 s
@
v4
s
@
@
@
@
@
@s
v3
v6
s
@
@s
v5
@
@
@s
v7
28
2.2 Sea G1 el grafo formado, eliminando del grafo G del ejercicio anterior los vertices v1 y v7 y la
arista {v2 , v4 }.
(a) Hallar su matriz de adyacencia.
(b) Aplicar el algoritmo de Warsall dado en Algoritmo 1 de la pagina 26 para comprobar que
es conexo. En que valor de k se obtiene ya la matriz toda de unos?
(c) Si la condicion de parada es que todos los elementos de una fila o columna son uno (que no
sean de la diagonal principal), para que valores de k y j se consigue?
Implementar en Matlab el algoritmo de Warsall anterior:
[i] Sin condiciones de parada.
[ii] Que a la vista de la matriz resultante, diga si el grafo es o no conexo.
[iii] A
nadiendo la condicion de parada cuando se consiga una matriz toda de unos.
[iv] Que la condicion de parada sea una fila (o columna) toda de unos.
[v] Implementarlo con operaciones matriciales, en la forma descrita en la Observacion 15.
2.3 Considerar el digrafo D del Ejercicio 1.2 dado por su matriz de adyacencia M .
(a) Si es posible, encontrar en D un camino, una cola que no sea camino y una trayectoria que
no sea cola, del vertice B al vertice D .
(b) Comprobar cual de las trayectorias T1 = B A C E C D F D F y T2 = B A C E D C F D F
es valida y obtener en ella un camino de B a F .
(c) Es un digrafo conexo?
Introducir la matriz M y las trayectorias como los vectores respectivos T1 y T2.
[i] Decidir la trayectoria valida usando el metodo construido en el Ejercicio 2.1[iii].
[ii] Construir A, la matriz del grafo no dirigido subyacente a D , y comprobar que el digrafo
es conexo usando alguno de los algoritmos de Warsall construidos anteriormente.
2.4
2.5
Implementar como algoritmo en Matlab el proceso paso a paso del Ejercicio 2.1(e).
Pr
actica (Primera parte).- Elaborar una funcion Floyd, que mejore el algoritmo de L Floyd para
usar operaciones matriciales (en el mismo sentido que en el Ejercicio 2.2[v]). Que su entrada sea
u
nicamente la matriz de adyacencia de un grafo o digrafo y, tenga de salida 1 (conexo) o 0 (no
conexo) como primer argumento y la matriz de alcance mnimo como segundo argumento.
Matlab 6.1.
29