Professional Documents
Culture Documents
1. Introducción
El trabajo que vamos a desarrollar tiene como marco la Teorı́a de Grafos. La Teorı́a
de Grafos es parte de la Matemática Discreta, y tiene ya varios siglos de antigüedad.
Sin embargo, el creciente uso de los ordenadores ha conducido a un enorme crecimiento
del estudio de los aspectos computacionales de las diferentes disciplinas. Las aplicaciones
de la Teorı́a de Grafos se extienden a una enorme variedad de campos: Matemáticas,
Informática, Fı́sica, Quı́mica, Biologı́a, Ingenierı́a, Sociologı́a, Comercio...
Como consecuencia se ha producido una revitalización del interés que la Teorı́a de
Grafos despierta, centrado en gran medida en el diseño y análisis de Algoritmos.
La ciudad de Könisberg, hoy Kaliningrado (ciudad natal de Immanuel Kant), en la
antigua Prusia, está situada a las orillas del rı́o Pregel. Este rı́o rodea la isla de Kneiphof, y
en el siglo XVIII habı́a siete puentes uniendo las cuatro zonas de tierra en que se distribuı́a
la ciudad:
x sH
HH
HH
H
y s s w
H
z s
2. Conceptos básicos
Definición 1 Un grafo G con n vértices y m lados consiste en:
Una relación que asigna a cada arista dos vértices (quizá iguales), que se llaman
sus extremos.
2
a6 a4
x3r a5 r x4 x3r r x4
H a3
H a
H
a2 H a3 7 a4 a1 a2
H
H
H al a6
r a1 HH
r
r5 r
x1 x2 a x1 x2
8
u
r
6
]
JJ
y r
J
Y
H HH
J
H
H J
HH rx J
* H J
H
H J
wr
H- Jrv
H
No hay que confundir el dibujo con el grafo, un mismo grafo puede tener dos dibujos
distintos, pues lo importante es la relación entre vértices y aristas, no la forma en que se
representan:
u
u v u uw
J @
J @
y u
J @
HHH
J @
H
H J @
HHux J @
H J @
H
H J @ x
u
w
HH Juv u u @u uy
v0 , a1 , v1 , a2 , v2 , . . . , vs−1 , as , vs
Su longitud es s.
3
Se dice que el camino es un ciclo si vs = v0 .
Por ejemplo:
a6
x3 a5
s s x4
HH
H a7
HH x3 , a5 , x4 , a5 , x3 , a2 , x1 , a1 , x2 , a8 , x2
a2 H a4
HaH
3 x1 , a6 , x4 , a7 , x3 , a2 , x1
H
a1 HH
s Hs
x1 x2
a8
3. Grafos Eulerianos
Volvamos al problema inicial propuesto por Euler, que ahora se traduce en lo siguiente:
Problema: Dado un grafo, ¿cuándo existe un ciclo que pasa una y sólo una vez por
todas sus aristas?
Definición 4 Un grafo es conexo si cada par de vértices se puede unir por un camino.
4
3.2. Caracterización de grafos eulerianos:
Teorema 5 Un grafo es euleriano si y sólo si al quitar sus puntos aislados es conexo y
todos sus vértices tienen grado par.
3 r
HH
El grafo de Könisberg no es euleriano: HH
5 r H
r 3
3 r
La demostración del teorema pasa por el uso de un algoritmo de construcción del ciclo
euleriano, algoritmo intuitivo basado en la más pura lógica.
3.3. Algoritmo:
Este proceso continúa hasta que no se puede seguir, en cuyo caso, dada la
hipótesis sobre los grados pares, se ha vuelto al punto de partida, esto es,
se tiene un ciclo.
Si después de esto todavı́a quedan aristas sin recorrer, la conexión del grafo
implica que alguna de ellas tiene por extremo uno de los vértices por los
que ya se pasó. Se repite el proceso anterior desde este vértice (sin tener
en cuenta las aristas ya eliminadas), con lo que se construye otro ciclo.
Posteriormente, este nuevo ciclo se “une” al anterior.
3.4. Ejemplo:
Partimos de siguiente grafo, que es euleriano por tener todos sus vértices grado par:
s s s s
@@ @@
@ @
@ @
@s @s
@@ @
@ @
@ @
s @s s @
@s
5
Partimos del vértice superior izquierda, y recorremos las aristas marcadas, llegando
de nuevo al mismo vértice y sin posibilidad de seguir (los números representan el orden
en que se recorren las aristas):
s 1 s s s
@@ @@
@3 2 @
@ @
@s @s
@@ @
@ @
@ @
s @s s @
@s
Eliminamos las aristas recorridas y buscamos un vértice que sea extremo de alguna de
ellas y a la vez de alguna de las no recorridas (por ejemplo, el segundo de la fila superior).
Empezamos de nuevo en ese vértice, hasta que volvemos a cerrar el circuito sin posibilidad
de seguir:
s 1 s 1 s 2 s
@@ @@
@3 2 @4
@ @ 3
@s 10 5 @s
@@ @
@ @7
@ 6 @
s @s s @
@s
9 8
Y ahora “unimos” el circuito anterior al recién construido, por medio del vértice de
contacto; el orden de recorrido de las aristas cambia de la forma lógica:
s 1 s 2 s 3 s
@@ @@
@ 13 12 @5
@ @ 4
@s 11 6 @s
@
@ @
@ @8
@ 7 @
s @s s @
@s
10 9
Se elige ahora otro vértice de contacto con las aristas restantes, el primero de la fila
del medio, y se repite el proceso, con lo que se termina finalmente de recorrer todas las
aristas, es decir, ya tenemos nuestro circuito euleriano:
6
s 1 s 2 s 3 s
@@ @@
@ 16 12 @5
@ @ 4
@s 11 6 @s
@@ @
15 13 @8
@
@ 7 @
s @s s @
@s
14 10 9
Tal grafo puede representar, por ejemplo, una red de carreteras, siendo los pesos la
longitud de las mismas (o el coste de recorrerlas).
7
4.3. Ejemplo
Vamos a ver el proceso con el siguiente grafo, fijando como punto de partida el punto
A:
Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K
En una primera etapa, alcanzamos todos los vértices posibles desde A, fijando como
distancias provisionales (etiquetas temporales) las longitudes de los caminos marcados
desde A:
Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K
8
Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K
De nuevo buscamos la distancia provisional mı́nima (la de B), que pasa a definitiva, y
miramos a qué vértices se llega desde B. Se repite la situación anterior para E: se puede
alcanzar por el camino que se tenı́a y por el camino que va primero hasta B y después
de B a E; este último es de peso menor, ası́ que se cambia el camino provisional (y por
tanto la distancia provisional) a E, pasando ahora por B:
Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K
Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K
Ahora hay dos mı́nimos: las distancias provisionales a E y G, que coinciden. Se elije
uno cualquiera de ellos para convertirla en definitiva (al otro le tocará en la siguiente
etapa), por ejemplo E:
9
Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K
El proceso continua:
B
r 2 D r 2 G
r 6 Jr B
r 2 D r 2 G
r 6 Jr
@ @ @ @
3 @4 1 5 @5 3 @4 1 5 @5
Ar 9 @ E
@r 2 H
r 9 @ @rL @ E H @
Ar 9 @r 2 r 9 @rL
@ @ @ @
2
@ 6 1 6
@ 3 2
@ 6 1 6
@ 3
@
@r 9 r 2 r 2@@r @ @
@r 9 r 2 r 2 @r
C F I K C F I K
B
r 2 D r 2 G
r 6 Jr B
r 2 D r 2 G
r 6 Jr
@ @ @ @
3 @4 1 5 @5 3 @4 1 5 @5
@ E H @ @ @
Ar 9 @r 2 r 9 @rL Ar 9 @Er 2 Hr 9 @rL
@ @ @ @
2
@ 6 1 @6 3 2
@ 6 1 6
@ 3
@
@r 9 r 2 @
r 2 @r @ @
@r 9 r 2 r 2 @r
C F I K C F I K
B
r 2 D r 2 G
r 6 Jr B
r 2 D r 2 G
r 6 Jr
@ @ @ @
3 @4 1 5 @5 3 @4 1 5 @5
Ar 9 @ E
@r 2 H
r 9 @ @rL @ E H @
Ar 9 @r 2 r 9 @rL
@ @ @ @
2
@ 6 1 6
@ 3 2
@ 6 1 6
@ 3
@
@r 9 r 2 r 2@@r @ @
@r 9 r 2 r 2 @r
C F I K C F I K
10
Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K
Ası́, en la primera etapa hay una etiqueta definitiva d(A) = 0, y todas las demás son
provisionales, p1 (v) = w(A, v), donde w(A, v) es el peso de la arista de A a v, si existe,
e ∞ si no existe. En nuestro ejemplo anterior, los vértices con etiqueta temporal ∞ eran
los vértices marcados en gris.
Si ya se han realizado i etapas, se van a tener i vértices con etiqueta definitiva,
d(v1 ), . . . , d(vi ), siendo v1 = A y vi el vértice al que se le puso etiqueta definitiva en
la etapa i. La etapa i + 1 consiste en elegir un vértice vi+1 con etiqueta temporal (es
decir, un vértice ya alcanzado) que sea lo más pequeña posible, y convertir esta etiqueta
en permanente. Ahora revisamos las demás etiquetas temporales, quedándonos para cada
vértice v con el mı́nimo entre su etiqueta temporal anterior y la suma d(vi+1 ) + w(vi+1 , v)
(corresponde a la eliminación de aristas que dan distancias más largas).
El proceso puede continuar hasta que se etiquetan definitivamente todos los vértices
conectados a A por un camino. Las etiquetas definitivas son la distancia de A a cada
vértice. Del mismo proceso se deduce la forma en la que se pueden construir los caminos
mı́nimos.
Para finalizar con el algoritmo de Dijkstra sólo queda añadir que para grafos (simples)
dirigidos pesados funciona exactamente igual, sólo hay que tener cuidado de respetar el
sentido de las aristas. Ahora w(vi , vj ) va a representar el peso de la (única) arista que
empieza en vi y termina en vj (que puede ser distinto de w(vj , vi )). Con esta precisión,
el algoritmo sigue el mismo proceso, comparando para el vértice v la etiqueta temporal
anterior con d(vi+1 ) + w(vi+1 , v) y quedándonos con el menor de ambos números.
Bibliografı́a:
West, D.: Introduction to Graph Theory (second edition). Prentice-Hall, 2001 (first
edition 1996).
Gross, J. and Yellen, J.: Graph Theory and its Applications. CRC, 1999.
11