Escolar Documentos
Profissional Documentos
Cultura Documentos
3 Grafos Eulerianos
Ejemplo 20.- Consideremos el multidigrafo y el multigrafo de abajo. Sus matrices de adyacencia serán
v2 0
2 0 0 0
x1 s
t t v4 HH
0 0 2 0 1
*
0 0 0 0 H
t
6 HH 2
x2 s Hs x4 0 2 1
MD = 1 1 0 0 0 MG =
v3 HH 6 6
jt t v5
0 2 0 1
HH 0 0 0 0 0
v1 1 1 1 0
s
0 0 0 1 1 x3
Observaciones 21.- 1.- La matriz MG es simétrica. Si G no tiene lazos la diagonal principal es nula,
y si G es simple, MG está formada únicamente por ceros y unos.
Definición 22.- Llamaremos cola euleriana en un multigrafo a una cola (trayectoria sin aristas repetidas)
que recorra todas las aristas del multigrafo. Si la cola euleriana es cerrada la llamaremos circuito euleriano.
A un multigrafo que contenga un circuito euleriano le llamaremos multigrafo euleriano.
Ejemplo 23.- Consideremos los grafos: C5 (los grafos ciclo, constan sólo de un ciclo, se denotan por
Cn donde n es el número de vértices), la Estrella de Mahoma y el multigrafo de los puentes de Könisberg.
xs
s s
HHH
H
@ C HH
s Hs w
s s s y
@ C
@s
A Q C
A Q
C
As s s QCs s
Q
z
Los dos primeros son grafos eulerianos, el primero obviamente y en el segundo puede formarse un circuito
con sus aristas (de hecho, puede redibujarse como C5 ). El tercero no es euleriano puesto que no tiene un
circuito euleriano, más aún tampoco tiene una cola euleriana. 4
Matlab 6.1. 11
2.3 Grafos Eulerianos
Teorema 24.- Un multigrafo conexo tiene un circuito euleriano si, y sólo si, todos sus vértices son de
grado par.
Demostración:
=⇒c (Teorema de Euler) Como el circuito recorre todas las aristas, cada vez que se accede a un vértice
por una arista se sale por otra distinta, luego el grado de cada vértice debe ser par.
⇐=c Sea G = (V, A) el multigrafo. Empezando en un vértice x cualquiera, se construye una cola
x a1 x1 a2 x2 · · · xp−1 ap xp lo más larga posible. Como de xp no se puede seguir, se han recorrido
todas las aristas incidentes en xp , este vértice tiene que aparecer anteriormente en la cola construida
(gr(xp ) ≥ 2); considerando la parte de la cola desde la primera aparición de xp hasta el final,
tenemos un circuito C1 que empieza y acaba en xp .
Si el circuito C1 no recorre todas las aristas de G, eliminamos todas las aristas de C1 (y los vértices
que queden aislados) y repetimos el proceso en el subgrafo que queda (los vértices que permanecen
siguen teniendo grado par). Obtendremos ası́ una cantidad finita de circuitos C1 , . . . , Cr de manera
que cada arista de G está contenida uno de esos circuitos.
Como G es conexo los circuitos tienen que tener vértices comunes con algún otro, luego basta con
englobar todos ellos en uno sólo que, por tanto, será euleriano.
Nota: En un multidigrafo puede haber varias aristas que unan los mismos dos vértices, por lo que las
trayectorias se denotan en la forma x1 a1 x2 a2 x3 · · · xk ak xk+1 , es decir, indicando la arista que se recorre.
Corolario 25.- Un multigrafo conexo tiene una cola euleriana si, y sólo si, no tiene vértices de grado impar
o tiene un único par de vértices de grado impar.
Demostración:
Supongamos que tiene una la cola euleriana que empieza en x y termina en y , entonces:
• Si x = y , la cola es un circuito euleriano, por lo que todos los vértices tienen grado par.
• Si x 6= y , añadimos una arista que una x e y teniendo ası́ un circuito euleriano con todos los vértices
de grado par. Luego, los vértices x e y son los únicos con grado impar.
Recı́procamente, si hay dos vértices de grado impar basta añadir una arista uniendo esos vértices y
aplicar el teorema anterior.
Algoritmo de Fleury 26.- Si un multigrafo (V, A) tiene una cola euleriana C , puede construirse mediante
el siguiente algoritmo:
P1.− Empezar en un vértice x de grado impar. Si no lo hay, empezar en cualquier vértice x. Hacer
C = x.
P3.− Si gr(x) = 1 con a = {x, y}, tomar (V, A) = (V − {x}, A − {a}), hacer C = Cay y continuar en
P5.
P4.− Si gr(x) > 1 elegir una arista a = {x, y}, cuya eliminación no desconecte el multigrafo. Tomar
(V, A) = (V, A − {a}) y hacer C = Cay .
Para el caso de los multidigrafos, los resultados son análogos teniendo en cuenta que la cola debe ser
dirigida, es decir, para que exista un circuito en cada vértice al que se llegue debe haber un arco saliente.
Las pruebas de los resultados son similares, por lo que únicamente los enunciamos:
Matlab 6.1. 12
2.3 Grafos Eulerianos
Teorema 27.- Un multidigrafo conexo tiene un circuito euleriano si, y sólo si, todos sus vértices tienen el
mismo ingrado que exgrado (ing(v) = exg(v), para todo v ).
Corolario 28.- Un multidigrafo conexo tiene una cola euleriana si, y sólo si, ing(v) = exg(v) para todo v , o
si lo verifican todos menos dos, x e y , estos han de verificar que ing(x) = exg(x)+1 e ing(y) = exg(y)−1
Algoritmo de Fleury (versión dirigida) 29.- Si un multidigrafo (V, A) tiene una cola euleriana C , puede
construirse mediante el siguiente algoritmo:
P1.− Empezar en el vértice x con exg(x) = ing(x) + 1. Si no lo hay, empezar en cualquier vértice x.
Hacer C = x.
P3.− Si exg(x) = 1 con a = (x, y), tomar (V, A) = (V − {x}, A − {a}), hacer C = Cay y continuar en
P5.
P4.− Si exg(x) > 1 elegir un arco a = (x, y), cuya eliminación no desconecte el multidigrafo. Tomar
(V, A) = (V, A − {a}) y hacer C = Cay .
2.3.1 Ejercicios
(c) Elegir un vértice y construir una cola euleriana. Escribirla como la sucesión de vértices por donde
pasa. ¿Qué longitud ha de tener la cola? ¿Cuántos vértices deben aparecer en su descripción?
(d) Sea M, la matriz de G1 . Construir una cola euleriana usándo únicamente la matriz M, aplicando
sobre ella el algoritmo de Fleury paso a paso.
Escribir de nuevo la cola como la sucesión de vértices por donde pasa.
(e) El grafo G2 modela las conexiones de fibra optica entre 5 nodos de la red. Para comprobar el
estado de las lı́neas se envı́a una única señal, que las recorre, y que será analizada al final del
recorrido. Si cada lı́nea debe recorrerse una única vez, ¿es suficiente con enviar una señal desde
y1 para comprobar todas las lı́neas? ¿Puede recogerse la señal final también en y1 ?
Si la respuesta es afirmativa para alguna de las preguntas, indicar un recorrido posible para
cumplirlo.
[i] Obtener el grado de cada vértice y comprobar su paridad. (Ver la función mod(m,n), resto
de la división entera de m entre n).
[ii] Construir una función que detecte si el grafo tiene o no una cola euleriana.
[iii] Detecta los vértices posibles para comenzar la cola euleriana y elige el de menor ı́ndice.
Matlab 6.1. 13
2.3 Grafos Eulerianos
[iv] Obtener los vértices a los que llegan las aristas que salen de x3 . Elegir el vértice de menor
ı́ndice y eliminar la arista de G1 . ¿El grafo resultante sigue siendo conexo?
[v] Lo realizado en el apartado [iv] supone una implementación parcial del paso P4 del algoritmo
de Fleury. Completar la implementación del paso 4.
[vii] Incluir en un bucle las implementaciones de los pasos del algoritmo para obtener una cola
euleriana.
3.2 Para el multigrafo G y el multidigrafo D , representados abajo, detectar si existe cola euleriana.
x1 x2 x3 x4 v1 v2 v
t t t t t t - t3
-
-
6I
@
@
@
@
G @
@
t t t t @t? D
x5 x6 x7 v4 v5
(a) Construir, si existe, una cola euleriana en G usando únicamente su matriz de adyacencia.
Tomar, cuando haya que elegir, el vértice posible de menor ı́ndice.
(b) ¿Se produce algún cambio en la forma de construir la cola por ser G multigrafo?
(c) Construir, si existe, una cola euleriana en D usando únicamente su matriz de adyacencia.
Tomar, cuando haya que elegir, el vértice posible de menor ı́ndice.
(d) ¿Se produce algún cambio en la forma de construir la cola por ser D dirigido?
[i] Modificar, si es necesario, el programa realizado en el apartado 3.1[iv] para obtener una cola
euleriana a partir de la matriz Mg del multigrafo G.
[ii] Construir una función que detecte si un multidigrafo tiene o no una cola euleriana.
[iii] Modificar, si es necesario, el programa realizado en el apartado anterior para obtener una cola
euleriana a partir de la matriz Md del multidigrafo D .
Práctica 2.-
1.- Construir una función Euler con argumento de entrada la matriz de adyacencia de un (multi)grafo
no dirigido y salida una cola euleriana, si existe, y una matriz vacı́a si no existe.
2.- Construir una función DiEuler con argumento de entrada la matriz de adyacencia de un
(multi)digrafo y salida una cola euleriana, si existe, y una matriz vacı́a si no existe.
3.- Construir una función Cola Euler con argumento de entrada la matriz de adyacencia de un
(multi)grafo o un (multi)digrafo que llame a las funciones Euler o DiEuler, según el caso, y
salida una cola euleriana, si existe, y una matriz vacı́a si no existe.
Matlab 6.1. 14