Está en la página 1de 248

Manual de algortmica

MANUAL DE ALGORTMICA

Proyecto fin de carrera


Escuela Tcnica Superior de Ingeniera Informtica
Departamento Matemticas Aplicadas I
Tutor: Alberto Mrquez Prez

Borrego Ropero, Rafael


rafaborrego@gmail.com
Recio Domnguez, Daniel
danird@gmail.com

Borrego Ropero Rafael


Recio Domnguez Daniel

1 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

2 de 248

Manual de algortmica

1.- Introduccin................................................................................................... 6
2.- Conceptos generales. ................................................................................... 8
Grafos, tipos, ejemplos................................................................................ 8
Algunas definiciones. ................................................................................ 12
Algunos grafos bsicos. ............................................................................ 17
Tipos de rutas ........................................................................................... 46
Grafo complementario............................................................................... 48
Grafo de lnea. .......................................................................................... 50
3.- Algoritmos implementados. ......................................................................... 54
3.1.- Algoritmos sobre caminos mnimos. ..................................................... 54
Algoritmo de Dijkstra. ................................................................................ 54
Algoritmo de Floyd. ................................................................................... 61
3.2.- Algoritmos de distancias....................................................................... 65
Excentricidad de un vrtice. ...................................................................... 65
Radio de un grafo...................................................................................... 67
Dimetro de un grafo................................................................................. 69
Distancia de un vrtice. ............................................................................. 70
Algoritmo de la mediana............................................................................ 72
Algoritmo del centro. ................................................................................. 73
3.3.- Conectividad......................................................................................... 75
Algoritmo de componentes conexas. ........................................................ 75
Vrtices de corte. ...................................................................................... 77
Aristas puente. .......................................................................................... 78
Bloques. .................................................................................................... 79
3.4.- Algoritmos de bsquedas. .................................................................... 88
Bsqueda en profundidad (DFS) .............................................................. 88
Bsqueda en anchura (BFS) .................................................................... 90
3.5.- rboles recubridores de peso mnimo. ................................................. 92
Algoritmo de Boruvka. ............................................................................... 92
Algoritmo de Prim...................................................................................... 98
Algoritmo de Kruskal. .............................................................................. 100
3.6.- Prufer.................................................................................................. 103
Algoritmo de codificacin. ....................................................................... 103
Algoritmo de decodificacin. ................................................................... 110
3.7.- Algoritmo de emparejamientos ........................................................... 120
Algoritmo de emparejamiento maximal simple........................................ 121
Algoritmo de Kuhn-Munkres.................................................................... 128
Algoritmo de Kuhn-Munkres con preprocesamiento (peso mnimo)........ 142
Algoritmo de emparejamiento maximal de peso ptimo.......................... 146
3.8.- Euler ................................................................................................... 157
Es euleriano ?. ..................................................................................... 157
3.9.- Algoritmos de bsqueda de trayectorias eulerianas. .......................... 162
Algoritmo de Fleury ................................................................................. 162
Algoritmo de Tucker. ............................................................................... 183
Algoritmo de Hierholzer........................................................................... 201
Problema del cartero ............................................................................... 205
3.10.- Algoritmos de vrtice coloracin....................................................... 212
Algoritmo de coloracin Secuencial o Voraz. .......................................... 213

Borrego Ropero Rafael


Recio Domnguez Daniel

3 de 248

Manual de algortmica
Algoritmo de coloracin Welsh-Powell .................................................... 215
Algoritmo de coloracin Matula-Marble-Isaacson ................................... 216
Algoritmo de coloracin de Brelaz........................................................... 217
Es bipartito? .......................................................................................... 221
3.11.- Algoritmos de aristas coloracin....................................................... 225
Algoritmo basado en rellenar un cuadrado latino .................................... 225
Algoritmo basado en emparejamientos maximales................................. 228
3.-12.- Hamilton .......................................................................................... 235
Algoritmo de Dirac................................................................................... 235
Bsqueda de trayectorias hamiltonianas................................................. 239
4.- Bibliografa ................................................................................................ 248

Borrego Ropero Rafael


Recio Domnguez Daniel

4 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

5 de 248

Manual de algortmica

1.- Introduccin.
Nos encontramos ante una aplicacin desarrollada para el departamento
de matemtica aplicada I con el objetivo de proporcionar una herramienta que
ayude al desarrollo de las prcticas de las asignaturas dedicadas al estudio de
los grafos y la investigacin.
La aplicacin desarrollada tiene como objetivos mejorar algunos
aspectos de la aplicacin Algraf la cual ha sido punto de partida de este
proyecto por lo que se mantiene la compatibilidad con versiones anteriores.
La aplicacin resuelve todos los problemas recogidos en versiones
anteriores de Algraf y se han incluido algunos nuevos por los que ahora la
aplicacin da solucin a gran cantidad de problemas entre los que podemos
destacar.

- Problema de rutas.
- Problemas de ubicacin.
- Problemas de compatibilidades o coloracin.
- Problemas de minimizacin de costes.
- Problemas de emparejamientos.

Los conceptos expuestos a continuacin estn enfocados a la


comprensin nica y exclusivamente a los algoritmos desarrollados para la
aplicacin. Se ha pretendido que sea un manual autocontenido por lo que
cualquier concepto necesario para entender de los algoritmos o funcionamiento
de la aplicacin est debidamente explicado.

Borrego Ropero Rafael


Recio Domnguez Daniel

6 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

7 de 248

Manual de algortmica

2.- Conceptos generales.


Grafos, tipos, ejemplos.

Un grafo G es un conjunto finito, no vaco de vrtices V(G) y un


conjunto de aritas E(G) que puede ser vaco formado por pares no
ordenados de elementos pertenecientes a V(G). Solo se establecer un
orden cuado hablemos de grafos dirigidos y a las aristas se las
denomina arcos.
Ejemplo de grafo no dirigido.

La matriz de adyacencias del grafo es simtrica respecto a la


diagonal principal por ser no dirigido.

v7
v1
v2
v3
v4
v5
v6

Borrego Ropero Rafael


Recio Domnguez Daniel

v1

v2

1
1
1

v3

v4

1
1

v5
1

v6

v7

8 de 248

Manual de algortmica
Si dos o ms aristas unen el mismo par de vrtices se llaman
aristas paralelas y en este caso tenemos un multigrafo.
Si una arista une un mismo vrtice se trata de un lazo o bucle.
Si en un grafo se permite aristas paralelas y bucles obtenemos un
seudografo.

Ejemplo de grafo dirigido.

Matriz de adyacencias del grafo.

v1
v2
v3
v4
v5

Borrego Ropero Rafael


Recio Domnguez Daniel

v1

v2

v3
1

v4

v5
1

9 de 248

Manual de algortmica
Un grafo es ponderado si cada arista lleva asociada una magnitud,
longitud, dificultad al recorrerla
Ejemplo de grafo ponderado no dirigido.

La matriz de adyacencias del grafo es simtrica respecto a la


diagonal principal por ser no dirigido.

v1
v2
v3
v4
v5
v6
v7

Borrego Ropero Rafael


Recio Domnguez Daniel

v1

5
2

v2
3

3
6
1

v3

v4

6
1

v5
5
1

v6
2

v7

10 de 248

Manual de algortmica
Ejemplo de grafo ponderado dirigido.

Matriz de adyacencias.

v1
v2
v3
v4
v5
v6
v7
v8

v1

v2
2

v3
3

v4

v5

v6

1
1

v7

v8

4
2

Si G es un grafo no dirigido y e = uv es una arista de G diremos que u


es adyacente a v o que v es adyacente a u o e une u y v, e incide en
v y u.
En caso de tratarse de un grafo dirigido diremos que u es adyacente a
v y v es adyacente desde u. El arco (u, v) es incidente desde u e
incidente hacia v.

Borrego Ropero Rafael


Recio Domnguez Daniel

11 de 248

Manual de algortmica

Algunas definiciones.

Tamao y orden de un grafo.


El orden de un grafo G es el nmero de vrtices del grafo y
tamao es el nmero de aristas.
p = orden (G) = | V (G) |.
q = tamao (G) = | E (G) |.

Valencia o grado de un vrtice v.


En un grafo no dirigido el grado de un vrtice v es el nmero de
aristas que inciden en l o nmero de vrtices adyacentes.
En grafos dirigidos se distingue entre grado de entrada y salida
del vrtice.
El grado de entrada de v se define como el nmero de vrtices
adyacentes y el grado de salida de v es el nmero de vrtices
adyacentes hacia el v o nmero de vrtices que apuntan a v.

Subgrafo.
Un grafo H es subgrafo de un grafo G si V(H) V(G).
Ejemplo.

Borrego Ropero Rafael


Recio Domnguez Daniel

12 de 248

Manual de algortmica
Subgrafo H.

No es un subgrafo.

Borrego Ropero Rafael


Recio Domnguez Daniel

13 de 248

Manual de algortmica
Subgrafo inducido por vrtices.

Sea S un conjunto de vrtices no vaco de un grafo G. El subgrafo


inducido por S es el subgrafo maximal de G con vrtices en el conjunto
S. Al conjunto de aristas lo denotaremos por <S>.
En <S> estn todas las aristas de G que unen dos vrtices de S.
Un subgrafo H es subgrafo inducido por vrtices si existe S
V (G) tal que H = <S>.
Ejemplo

Borrego Ropero Rafael


Recio Domnguez Daniel

14 de 248

Manual de algortmica
Subgrafo inducido por lo vrtices {v1, v4, v5, v6}.

Subgrafo inducido por aristas.

Sea X un conjunto no vaci de aristas de G. El subgrafo inducido


por X es el subgrafo mnimo de G con X el conjunto de aristas y <X> el
conjunto de vrtices.
En <X> estn todos los vrtices incidentes con alguna arista de X.
Un subgrafo es subgrafo inducido por aristas si H = <X> para
algn X E (G).

Borrego Ropero Rafael


Recio Domnguez Daniel

15 de 248

Manual de algortmica
Ejemplo

Subgrafo inducido por las aristas {v1v4, v4v5, v5v6, v6v3, v4v3}.

Borrego Ropero Rafael


Recio Domnguez Daniel

16 de 248

Manual de algortmica

Algunos grafos bsicos.

Grafos completos.
Sea G un grafo de orden p. G es completo si dos vrtices cualesquiera
del grafo son siempre adyacentes, es decir, todos sus vrtices tienen
valencia o grado p-1 (kp).
Ejemplo k4.

Ejemplo k5.

Borrego Ropero Rafael


Recio Domnguez Daniel

17 de 248

Manual de algortmica

Caminos simples.

Un grafo de orden p 1 que es un camino simple se denota Pp.


Un camino simple tiene longitud par si p es impar y longitud impar
si p es par.
Ejemplo

Ciclos.

Los ciclos Cn o n-ciclos para p 3, son grafos que se asemejan a


polgonos de p lados.
Un ciclo tiene longitud par si n es par y longitud impar si n es par.
Ejemplo C5.

Borrego Ropero Rafael


Recio Domnguez Daniel

18 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

19 de 248

Manual de algortmica
rbol.
Un rbol de n vrtices es un grafo conexo, sin ciclos con exactamente
n-1 aristas.
Adems posee las siguientes propiedades.
a) Dos vrtices cualesquiera estn unidos por un nico camino.
b) Si al grafo le eliminamos cualquiera de sus aristas queda
dividido exactamente en dos componentes conexas dando lugar a un
bosque.
Ejemplo.

Borrego Ropero Rafael


Recio Domnguez Daniel

20 de 248

Manual de algortmica
Bosque
Conjunto de rboles.
Ejemplo.

Existen ms tipos de grafos como los bipartitos los cuales se comentan


ms adelante. Concretamente hay un apartado dedicados exclusivamente para
ellos y en el algoritmo de Kuhn-Munkres se comenta previamente los grafos
bipartitos completos.

Borrego Ropero Rafael


Recio Domnguez Daniel

21 de 248

Manual de algortmica

rbol n-ario completo.

Una de las formas de representacin de la informacin, como estructura


de datos, ms utilizada es el rbol.
Un rbol consiste en un nodo inicial, llamado raz, del que parten un
cierto nmero de aristas, denominadas ramas, cada una hasta un nuevo
vrtice. Los vrtices extremos de una arista se llaman tambin vrtice padre,
aquel que se representa ms cerca de la raz, y el otro vrtice hijo. A su vez,
estos vrtices hijos pueden presentar ramas hacia nuevos nodos hijos, que
debern ser siempre nodos diferentes, ya que un rbol no puede presentar
ciclos. Por ltimo, aquellos vrtices que no presentan ramas hacia ningn hijo,
se denominan hojas.
El caso de los rboles n-arios completos es un caso particular dentro de
los rboles. La referencia a n-arios-completos se debe a que el nmero de
ramas que sale de cada nodo padre, que es en todos los casos igual a n.
Para definir completamente un grafo perteneciente a esta familia, en
realidad son necesarios 2 parmetros.
Uno es la n anteriormente comentado, y el otro es el nmero de niveles
que se le quiere dar al grafo, esto es, el nmero de ramas que deber tener el
grafo desde el vrtice raz hasta cualquiera de los vrtices hoja.

Borrego Ropero Rafael


Recio Domnguez Daniel

22 de 248

Manual de algortmica
Grafos nulos

Un grafo nulo es aquel que no contiene aristas.


Un grafo nulo puede tener un nmero de vrtices cualquiera pero todos
ellos son vrtices aislados. Obviamente, en un grafo nulo el nmero de
componentes conexas ser igual al nmero de vrtices.
Un ejemplo de grafo nulo de cuatro vrtices puede observarse en la
figura.

Borrego Ropero Rafael


Recio Domnguez Daniel

23 de 248

Manual de algortmica

Rueda

Como en los casos de los grafos ciclos y los grafos estrella, la familia de
los grafos ruedas toma su apelativo de la figura con la que se representan
estos grafos. En este caso, la figura que muestra un grafo rueda viene a ser el
resultado de la unin de las dos familias citadas anteriormente, esto es, un
vrtice central rodeado de los dems vrtices del grafo en forma de crculo, de
forma que stos se unen mediante aristas entre vrtices consecutivos, y, a su
vez, mediante una arista ms, quedan unidos al vrtice central, dando al
conjunto el aspecto de una rueda con sus radios.
As, para cada n4, el grafo rueda, W n, con n+1 vrtices, se define como
la unin K1+Cn, de un vrtice aislado con un ciclo de longitud n.

Borrego Ropero Rafael


Recio Domnguez Daniel

24 de 248

Manual de algortmica
Cubos

Otra de las familias de grafos que suelen considerarse con bastante


asiduidad es la de los cubos. Esta familia est formada por los cubos de las
distintas dimensiones, desde el cubo de dimensin 1, como observaremos en
el apartado siguiente, hasta cualquier nmero de dimensiones.
Sea K un entero positivo mayor que 1. El k-cubo, Qk, es el grafo cuyos
vrtices son las k-tuplas ordenadas de ceros y unos, en el cual dos vrtices
estn unidos por una arista si y slo si difieren exactamente en una posicin.
As, por ejemplo, para k=3, los vrtices son (0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1),
(1, 0, 0), (1, 0, 1), (1, 1, 0), y (1, 1, 1) y, por ejemplo, (0, 0, 0) est unido con (0,
0, 1), (0, 1, 0) y (1, 0, 0) pero no con ningn otro vrtice.
Se puede comprobar que un k-cubo tiene 2k vrtices, 2(k-1)k aristas y es
bipartito.

Cubo de dimensin 1.

El grafo que representa el cubo de dimensin 1, tal y como se ha


explicado en el apartado anterior, tiene 21 vrtices y (1/2)21 = 1 arista.

Borrego Ropero Rafael


Recio Domnguez Daniel

25 de 248

Manual de algortmica
Cubo de dimensin 2.

Como ya se ha explicado en apartados anteriores, el grafo que


representa el cubo de dimensin dos tiene un total de 4 vrtices de grado 2,
para lo cual son necesarias 4 aristas.

Cubo de dimensin 3.

Al igual que en los casos de los dems cubos, el grafo que representa el
cubo de dimensin tres sigue la misma relacin de vrtices y aristas descrita en
la introduccin de este apartado. Por lo tanto, el cubo de 3 dimensiones, tal y
como es comnmente conocido, cuenta con 8 vrtices de grado 3, para lo cual
necesita 12 aristas.

Borrego Ropero Rafael


Recio Domnguez Daniel

26 de 248

Manual de algortmica
Cubo de dimensin 4.

Como en los casos anteriores, el cubo de 4 dimensiones tambin cumple


la relacin de vrtices y aristas descrita, por lo que tiene 24 vrtices y 25 aristas,
lo que le da un grado 4 a todos sus vrtices, como ya sabamos.

Borrego Ropero Rafael


Recio Domnguez Daniel

27 de 248

Manual de algortmica
Cubo de dimensin 5.

Para terminar con los grafos relativos a la familia de los cubos ndimensionales que se incluyen en la aplicacin del presente proyecto fin de
carrera, el cubo de 5 dimensiones constar, naturalmente, de 32 vrtices con
80 aristas. Como en el resto de cubos, se puede comprobar que el grado de
todos y cada uno de los vrtices del grafo coincide con la dimensin, en este
caso, 5.

Borrego Ropero Rafael


Recio Domnguez Daniel

28 de 248

Manual de algortmica
Rejillas

La familia de grafos que recibe la denominacin de rejillas contiene


aquellos grafos cuya representacin da como resultado una trama de figuras
regulares repetidas un cierto nmero de veces, lo que da al conjunto el aspecto
de una rejilla, lo que le da nombre a la familia.
As, podran existir tantos tipos de rejillas como figuran geomtricas
quisiramos utilizar como base para la construccin de las mismas.
En el presente trabajo se han considerado solamente las dos ms
sencillas: la rejilla rectangular y la rejilla triangular, que se explican a
continuacin.

Rejilla rectangular

La familia de grafos que componen las rejillas rectangulares se compone


de todos aquellos grafos cuya representacin tiene la forma de un rectngulo
dividido en un cierto nmero de porciones de ancho por otro cierto nmero de
porciones de alto, lo que da al conjunto el aspecto de una rejilla formada, a su
vez, por rectngulos de igual tamao.
Estos grafos se caracterizan por tener lo que podramos denominar tres
grupos diferentes de vrtices. Los vrtices correspondientes a las esquinas del
rectngulo, que tendrn, naturalmente, grado 2; los vrtices que forman los
lados del rectngulo, que tendrn grado 3; y los vrtices interiores, que tendrn
grado 4.
El nmero de aristas de estos grafos est claramente determinado por
las dimensiones que le demos al rectngulo. Para un nmero i de vrtices de
ancho y un nmero j de alto, el nmero de aristas del grafo vendr
determinado por la frmula (j-1)i + (i-1)j.

Borrego Ropero Rafael


Recio Domnguez Daniel

29 de 248

Manual de algortmica
Grafo rejilla rectangular de 20 x 5.

Rejilla triangular

La familia de grafos de las rejillas triangulares, paralelamente a la del


rejillas rectangulares, contiene grafos cuya representacin es un triangulo
dividido en porciones triangulares iguales.
Como es fcil de suponer, el nmero de porciones en que se puede
dividir el tringulo de la rejilla tambin est limitado. A diferencia de la rejilla
rectangular, las dimensiones de la rejilla triangular se determinan
perfectamente con un solo parmetro que ser el nmero de vrtices por cada
lado.
Al igual que ocurre con las rejillas rectangulares, en las triangulares
tambin podemos encontrar tres grupos diferentes de vrtices. Los vrtices
correspondientes a las esquinas del tringulo, que tendrn, igualmente, grado
2; los vrtices que forman los lados del tringulo, que tendrn en este caso
grado 4; y los vrtices interiores, que tendrn grado 6.
El nmero de aristas de estos grafos tambin viene determinado,
lgicamente, por las dimensiones que le demos al tringulo. Para un nmero
n de vrtices de lado del tringulo, el nmero de aristas del grafo vendr
determinado por la frmula (3/2)n(n-1).

Borrego Ropero Rafael


Recio Domnguez Daniel

30 de 248

Manual de algortmica
Grafo rejilla triangular de 11 vrtices de lado.

Borrego Ropero Rafael


Recio Domnguez Daniel

31 de 248

Manual de algortmica
Grafos Platnicos

En el espacio de tres dimensiones, un poliedro es un slido limitado por


superficies, llamadas comnmente caras, cada una de las cuales es un plano.
Un slido se dice que es convexo si cualesquiera dos puntos de su interior
pueden unirse mediante una lnea recta que se encuentre completamente en el
interior del slido.
Sea una cara de un grafo plano G. Definimos el grado de , denotado
por d(), al nmero de aristas del contorno de .
Los vrtices y las aristas de un poliedro, que forman el esqueleto del
slido, forman un grafo simple en el espacio de tres dimensiones. Se puede ver
que si el poliedro es convexo el grafo resultante es planar, y claramente,
que tambin es conexo. Que el grado mnimo de cada vrtice ser, como
mnimo, de 3 y que el grado de cada cara es tambin como mnimo de 3.
Adems, en particular el grafo resultante tambin es simple, por lo que se
puede establecer la definicin:
Un grafo conexo, simple y plano G se denomina polidrico si d(v) 3
para cada vrtice v de G y d()3 para cada cara de G.
Teorema: Sea P un poliedro convexo y sea G su grafo polidrico. Para
cada n3 sea vn el nmero de vrtices de G de grado n y sea fn el nmero de
caras de G de grado n.
<< vrticesG + carasG = aristasG +2 >>
El poliedro P, y por lo tanto el grafo G, tiene al menos una cara limitada
por un ciclo de longitud n para
n=3, 4, o 5.
Los antiguos griegos descubrieron cinco poliedros regulares. Se dice
que un poliedro es regular si es convexo y sus caras son polgonos regulares
congruentes (esto es, que los ngulos del poliedro son todos iguales). Estos
cinco poliedros son conocidos como slidos platnicos.
Usando la frmula de Euler se puede demostrar que no existe ningn
otro poliedro regular adems de los 5 que descubrieron los griegos y cuyos
grafos correspondientes constituyen la familia que se incluye en la herramienta
y los cuales se presentan a continuacin.

Borrego Ropero Rafael


Recio Domnguez Daniel

32 de 248

Manual de algortmica
A continuacin, se detalla un poco ms cada uno de los citados grafos.
Tetraedro

El grafo platnico que representa la figura del tetraedro consta,


naturalmente, de 4 vrtices y 6 aristas.
Como se puede observar en la figura siguiente, todos los vrtices del
grafo tienen grado 3, y las caras de la figura representada son todas tringulos,
como corresponde a dicha figura.
El grafo platnico tetraedro se encuentra representado planarmente en
la siguiente figura.

Borrego Ropero Rafael


Recio Domnguez Daniel

33 de 248

Manual de algortmica
Hexaedro

Como el hexaedro que representa, el grafo platnico hexaedro tiene 8


vrtices y 12 aristas, formando 6 caras de cuatro lados. Como todos sabemos
ya, la figura geomtrica hexaedro recibe tambin el nombre de cubo
refirindose al cubo de tres dimensiones, por lo que el grafo platnico
hexaedro, coincide exactamente con el grafo que representa el cubo
tridimensional.
El grafo platnico hexaedro se encuentra representado planarmente en
la siguiente figura.

Borrego Ropero Rafael


Recio Domnguez Daniel

34 de 248

Manual de algortmica
Octaedro

Como es bien conocido, un octaedro es una figura geomtrica que,


como su propio nombre indica, consta de ocho caras, en forma de tringulo.
Como es lgico, el grafo que lo representa tiene sus mismas caractersticas,
como ya hemos visto en los ejemplos anteriores, es decir, 6 vrtices y 12
aristas. El grado de todos los vrtices de este grafo, obviamente, es 4.
El grafo platnico octaedro se encuentra representado planarmente en la
siguiente figura.

Borrego Ropero Rafael


Recio Domnguez Daniel

35 de 248

Manual de algortmica
Icosaedro

Como en todos los casos anteriores el grafo platnico icosaedro, al


representar la figura geomtrica de la que toma nombre, posee tambin sus
mismas caractersticas. En el caso del icosaedro, 12 vrtices de grado 5, con
30 aristas, para lograr formar 20 caras triangulares.
El grafo platnico icosaedro se encuentra representado planarmente en
la siguiente figura.

Borrego Ropero Rafael


Recio Domnguez Daniel

36 de 248

Manual de algortmica
Dodecaedro

La ltima de las figuras representadas en la aplicacin y, por lo tanto,


contenidas en el presente texto, mediante un grafo platnico es la del
dodecaedro. Este grafo contar, pues, con los mismos 20 vrtices y las mismas
30 aristas que dan a la figura mencionada sus caractersticas 12 caras
pentagonales. Para ello, los vrtices de este grafo tienen todos grado 3.
El grafo platnico dodecaedro se encuentra representado planarmente
en la siguiente figura.

Borrego Ropero Rafael


Recio Domnguez Daniel

37 de 248

Manual de algortmica
Herschel

Se ha incluido en la aplicacin el grafo atribuido a Herschel ya que tiene


la particularidad de constituir el ejemplo ms pequeo de grafo polidrico nohamiltoniano.

Borrego Ropero Rafael


Recio Domnguez Daniel

38 de 248

Manual de algortmica
Harary

Otra de las familias que se incluyen en el presente trabajo es la


correspondiente a los grafos de Harary.
Los grafos de Harary se definen mediante dos parmetros: el nmero de
vrtices del grafo, que se denota por n; y el grado mnimo que debe tener cada
vrtice del grafo, que se denota por k. Debido a esta notacin, los grafos de
Harary suelen describirse mediante la simbologa: Hk, n.
Estos grafos cumplen la propiedad de hacer que cada uno de sus
vrtices tenga, como mnimo grado k, pero utilizando para ello el mnimo
nmero de aristas posible.
Un ejemplo de este tipo de grafos, donde se pueden observar las
caractersticas descritas es H11, 10.

Borrego Ropero Rafael


Recio Domnguez Daniel

39 de 248

Manual de algortmica
Grafos enlazados.

Los grafos enlazados se caracterizan porque, si numeramos sus


vrtices, las aristas del grafo enlazan vrtices cuyo nmero se diferencia un
una cantidad fija -que podemos llamar k-, es decir, siguiendo una determinada
progresin lineal.
Por ejemplo, si hacemos k=2, el vrtice 1 se unira al 3, el 2 al 4, y as
sucesivamente con todos los vrtices del grafo.
Si en lugar de tener en cuenta tan slo este valor de k, tomramos una
serie completa de valores k1, k2, ... , kn, obtendramos un grafo que podramos
denominar n-enlazado. Los grafos enlazados ms comunes son aquellos para
los que n=1, que denotamos por Ln,r y aquellos en los que n=2, que denotamos
por Ln,r,s.
Enlazados LN, R
Dado un grafo G, definido por un conjunto de vrtices V y un conjunto de
aristas A. Supongamos v1, ..., vn los vrtices contenidos en V. Se dice que G
es un grafo enlazado Ln, r si cumple que:
vi, vj V, tales que (j<r j+n=i+r) (j=r j=i+r), la arista (vi, vj) A
Los grafos enlazados Ln, r se caracterizan porque todos sus vrtices
tienen grado dos. Para r>1, la forma de estos grafos, situando sus vrtices en
crculo, es de estrella, como se puede observar en el ejemplo de la figura. L5,2.

Borrego Ropero Rafael


Recio Domnguez Daniel

40 de 248

Manual de algortmica
Enlazados LN, R, S
Dado un grafo G, definido por un conjunto de vrtices V y un conjunto de
aristas A. Supongamos v1, ..., vn los vrtices contenidos en V. Se dice que G
es un grafo enlazado Ln, r, s si cumple que:
r s,
vi, vj V, tales que (j<r j+n=i+r) (j=r j=i+r), la arista (vi, vj) A, y
vk, vl V, tales que (l<r l+n=k+r) (l=r l=k+r), la arista (vk, vl) A

Los grafos enlazados Ln, r, s se caracterizan porque todos sus vrtices


tienen grado cuatro. Un ejemplo de estos grafos es el que se puede observar
en la figura L7, 2, 3.

Borrego Ropero Rafael


Recio Domnguez Daniel

41 de 248

Manual de algortmica
Grafo de Petersen

El grafo que aqu se presenta debe su nombre a que la primera persona


que lo estudi fue Petersen en el ao 1891. Las tres representaciones ms
habituales del grafo de Petersen.

Entre las muchas cualidades interesantes que presenta este grafo,


podemos mencionar las siguientes.
Es un grafo 3-regular y de cintura 5, siendo adems, el grafo de orden
mnimo que cumple estas caractersticas.
Es un grafo de dimetro 2 lo que se traduce en que tiene 10 vrtices de
la forma ms compacta posible.
Tiene valor de conectividad y de arista-conectividad 3, caracterstica esta
que ha sido ampliamente estudiada en la rama de las redes de
telecomunicaciones.
No es un grafo hamiltoniano pero tiene la peculiaridad de que el
subgrafo resultante de eliminar cualquiera de sus vrtices s lo es. Adems, es
el menor grafo con esta propiedad.

Borrego Ropero Rafael


Recio Domnguez Daniel

42 de 248

Manual de algortmica
Grafo de Grtzsch.

Otro de los grafos que por su relevancia han sido incluidos en la


aplicacin como grafo singular es el denominado grafo Grtzsch. Para entender
el inters que presenta este grafo es necesario primero introducir algunos
conceptos de la Teora de Grafos. A continuacin pasamos a definir
brevemente tales conceptos.
Para cualquier grafo G un subgrafo completo de G se denomina clique
de G. El nmero de vrtices del clique ms grande de G se denomina el
nmero clique de G y se denota por cl(G).
Sea G un grafo. Un coloreado de vrtices de G asigna colores,
normalmente denotados por 1, 2, 3,... a los vrtices de G, uno por cada vrtice,
de forma que vrtices adyacentes tienen asignados colores diferentes.
Un k-coloreado de G es un coloreado que consiste en k colores
diferentes y, en ese caso, el grafo G se dice que es k-coloreable.
El mnimo nmero k para el cual existe un k-coloreado del grafo G se
denomina nmero cromtico de G (o ndice cromtico de G) .
Teorema: Para cada k1 existe un grafo k-cromtico Mk que no tiene
subgrafos tringulos (K3).
De esta familia de grafos Mi denominada familia Mycielski, el de
Grtzsch representa el grafo M4.
La siguiente figura muestra una representacin del grafo de Grtzsch.

Borrego Ropero Rafael


Recio Domnguez Daniel

43 de 248

Manual de algortmica
Grafo de Heawood

Se trata de un grafo 3-regular de cintura 6 con menor nmero de


vrtices.

Borrego Ropero Rafael


Recio Domnguez Daniel

44 de 248

Manual de algortmica
Tutte

El grafo de Tutte es un grafo planar, 3-conexo no hamiltoniano.


El aspecto ms importante que presenta este grafo es que se utiliza para
refutar la conjetura de Tait, que afirmaba que "todo grafo 3-regular, 3-conexo y
planar es hamiltoniano". Esta conjetura tena importancia para demostrar de
una forma sencilla el teorema de los cuatro colores, pero fracas a causa de
este grafo contraejemplo.
Una representacin de este grafo como la de la figura nos permitir
comprobar las propiedades descritas.

Borrego Ropero Rafael


Recio Domnguez Daniel

45 de 248

Manual de algortmica

Tipos de rutas

A continuacin definiremos algunos conceptos sobre rutas que debemos


conocer para comprender algunos de los algoritmos explicados.
Definiremos:
Camino.
Recorrido.
Camino simple.
Camino cerrado.
Ciclo.
Circuito.
Un camino w simple en un grafo G es una sucesin de alternada de vrtices y
aristas o arcos (si es dirigido) w: v0e1v1e2v2vn-1envn comenzando y terminando
con vrtices tal que ei = vi-1vi con 1 i n.
Diremos que w tiene longitud n si posee n aritas.
Un camino de longitud cero se denomina camino trivial.
Ejemplo.

Camino 1: v1v3v5v2v4v3v1v2.
Camino 2: v4v2v5v3v1.

Borrego Ropero Rafael


Recio Domnguez Daniel

46 de 248

Manual de algortmica
Un recorrido o trayectoria es un camino donde no se repiten aristas. Un
posible ejemplo basndonos en el grafo anterior.
Recorrido 1: v4v2v5v3v1.
Recorrido 2: v5v3v1v2.
Un camino simple es un camino en el que no se repiten vrtices.
Camino simple: v4v2v5v3v1.
Un ciclo es un camino simple v0v1vn con n 3, v0 = vn y los n vrtices
son distintos. Al ciclo de longitud n lo denominaremos n-ciclo.
Ciclo: v1v3v5v2v1
Un ciclo es un camino cerrado que cumple las propiedades anteriores y
un camino simple es un camino abierto.
Un camino cerrado donde no se repiten es un circuito.
Circuito: v1v2v5v3v2v4v3v1.

Vrtices repetidos
SI
SI
SI
SI
NO
NO

Aristas repetidas Abierto Cerrado


SI
SI
SI
NO
NO
SI
NO
SI
NO
SI

Borrego Ropero Rafael


Recio Domnguez Daniel

Tipo ruta
Camino
Camino cerrado
Recorrido
Circuito
Camino simple
Ciclo

47 de 248

Manual de algortmica

Grafo complementario.

El grafo complementario de G () es un grafo con V() = V(G) y tal que


si uv es una arista de si y solo si uv no es una arista de G.
Ejemplo 1. (Grafo no dirigido)

Grafo complementario.

Borrego Ropero Rafael


Recio Domnguez Daniel

48 de 248

Manual de algortmica
Ejemplo 2. (Grafo dirigido).

Grafo complementario.

Borrego Ropero Rafael


Recio Domnguez Daniel

49 de 248

Manual de algortmica

Grafo de lnea.

El grafo de lnea L(G) de G es un grafo que posee tantos vrtices como


aristas tiene G, es decir, | V(L(G)) | = | E(G) |. Dos vrtices v y u de L(G) son
adyacentes si u y v son aristas de G y inciden en un mismo vrtice.
Ejemplo 1

Grafo de lnea.

Borrego Ropero Rafael


Recio Domnguez Daniel

50 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

51 de 248

Manual de algortmica
Ejemplo 2.

Grafo de lnea.

Borrego Ropero Rafael


Recio Domnguez Daniel

52 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

53 de 248

Manual de algortmica

3.- Algoritmos implementados.


3.1.- Algoritmos sobre caminos mnimos.
Algoritmo de Dijkstra.
Sea G un grafo ponderado no trivial la distancia entre dos vrtices u y v
en G es la longitud mnima ponderada de todos los caminos u-v en G, si existe,
en otro caso infinito.
El algoritmo de Dijkstra calcula la distancia en desde un vrtice fijo
tomado como origen al resto de vrtices del grafo.
Dicho algoritmo se ha implementado mediante tcnicas de programacin
dinmica haciendo uso de una tabla en la que se van realizando una serie de
clculos previos para encontrar la distancia mnima entre el vrtice origen y el
resto de vrtices del grafo.
Para llevar a cabo la implementacin se ha usado una tabla
bidimensional la cual posee tantas filas y columnas como vrtices posee el
grafo. Adems se utilizan dos variables temporales m y Vi las cuales se van
machacando en cada iteracin las cuales almacenaran la distancia mnima
recorrida hasta el momento y el vrtice en el que nos encontramos actualmente
en un determinado instante de la ejecucin respectivamente. Inicialmente la
variable m tiene el valor cero y Vi almacena el vrtice origen.
Adems debemos saber que en cada posicin se almacena una tupla de
dos componentes. En la primera componente se almacena la distancia desde
el vrtice Vi al vrtice que ocupa una determinada columna. Y en la segunda
almacenamos el vrtice padre del vrtice que ocupa la columna, que en cada
iteracin ser Vi, a partir del cual se reconstruir el camino mnimo.
Una vez que tenemos claro la informacin que contiene dicha tabla
podemos rellenarla siguiendo los siguientes pasos.
La primera fila tiene de la tabla se inicializa por defecto con la tupla
(, -1). El -1 indica que el vrtice de la columna an no tiene asignado ningn
padre.

Borrego Ropero Rafael


Recio Domnguez Daniel

54 de 248

Manual de algortmica
En cada iteracin se rellena una fila, siguiendo los siguientes pasos:
1.- Buscamos los vrtices adyacentes al vrtice Vi y en la columna
correspondiente al adyacente.
Si la distancia total recorrida hasta el momento ms la distancia entre
Vi y el adyacente es menor o igual que la ya recorrida entonces
actualizamos la tupla con la nueva distancia y vrtice padre.
Es importante actualizar la tabla si la distancia es igual ya que as
conseguiremos obtener varias rutas mnimas entre el vrtice origen y destino.
2.- A continuacin tomamos como nuevo vrtice Vi, el vrtice
correspondiente a la columna cuya distancia es mnima. Una vez escogido el
vrtice cuya distancia es mnima la columna queda cerrada, es decir no vuelve
a considerarse para rellenar el resto de la tabla.
Una vez que tenemos rellenada la tabla reconstruir el camino mnimo a
partir de la misma es bastante fcil. Se ha optado por reconstruir el camino
desde el vrtice destino al vrtice origen, por lo que el primer vrtice que forma
parte del camino parcialmente construido es el vrtice destino.
Acto seguido nos situamos en la primera posicin distinta de * de la
columna correspondiente al vrtice destino comenzando por la parte inferior de
la tabla y el vrtice padre es el siguiente que forma parte del camino. La
longitud del camino viene determinada por la distancia almacenada en dicha
posicin.
Ahora nos situamos en la columna del vrtice padre y repetimos el
proceso anterior hasta llegar al vrtice origen. En ese momento tendremos el
camino mnimo completo.
Para que la exposicin
expondremos algunos ejemplos.

Borrego Ropero Rafael


Recio Domnguez Daniel

del

algoritmo

quede

totalmente

clara

55 de 248

Manual de algortmica
Ejemplo 1

Aplicamos el algoritmo de Dijkstra para encontrar el camino mnimo


entre el vrtice v1 y v8 obteniendo la siguiente tabla.
V1

(v2,P(v2))

(v3,P(v3))

(v4,P(v4))

(v5,P(v5))

(V6,P(v6))

(v7,P(v7))

(v8,P(v8))

Vi

(0,NP)
*
*
*
*
*
*
*

(,NP)
(2,v1)
*
*
*
*
*
*

(,NP)
(3,v1)
(3,v1)
*
*
*
*
*

(,NP)
(,NP)
(3,v2)
(3,v2)
*
*
*
*

(,NP)
(,NP)
(3,v2)
(3,v2)
(3,v2)
*
*
*

(,NP)
(,NP)
(,NP)
(,NP)
(4,v4)
(4,v5)
*
*

(,NP)
(,NP)
(,NP)
(6,v3)
(6,v3)
(6,v3)
(6,v3)
*

(,NP)
(,NP)
(,NP)
(,NP)
(,NP)
(,NP)
(8,v6)
(8,v7)

0
2
3
3
3
4
6
8

V1
V2
V3
V4
V5
V6
V7
V8

A continuacin reconstruiremos el camino desde el vrtice v1 a vrtice v8


comenzando por este ltimo.

Para ir desde el vrtice v8 al vrtice v1 es necesario pasar por el padre


de v8. El camino construido hasta el momento es v8  v7  ...  v1.
Seguidamente miraramos quien es el padre del ltimo vrtice que forma
parte del camino parcialmente construido, en este caso es v3 y as
sucesivamente.

Borrego Ropero Rafael


Recio Domnguez Daniel

56 de 248

Manual de algortmica

El camino completo es:


v8 {P(v8)}  v7 {P(v7)}  v3 {P(v3)}  v1 {P(v1)}.
Camino mnimo: v1  v3  v7  v8. La longitud del camino es 8.
Podemos observar en la columna del vrtice de destino que existen dos
tuplas con padres distintos e igual distancia lo cual no ndica que existe ms de
un camino mnimo.
Reconstruccin del segundo camino:
v8 {P(v8)}  v6 {P(v6)}  v5 {P(v5)}  v2 {P(v2)}  v1 {P(v1)}.
Camino mnimo: v1  v2  v5  v6  v8. La longitud del camino es 8.
Podemos observar que en la columna correspondiente al vrtice V6
existen dos tuplas con padres distintos y misma distancia por lo que existe otro
camino mnimo ms.

Reconstruccin del tercer camino:


v8 {P(v8)}  v6 {P(v6)}  v4 {P(v4)}  v2 {P(v2)}  v1 {P(v1)}.
Camino mnimo: v1  v2  v4  v6  v8. La longitud del camino es 8.

Borrego Ropero Rafael


Recio Domnguez Daniel

57 de 248

Manual de algortmica
Ejemplo 2

Aplicamos el algoritmo de Dijkstra para encontrar el camino mnimo


entre el vrtice v1 y v4 obteniendo la siguiente tabla.
V1

(v2,P(v2))

(v3,P(v3))

(v4,P(v4))

(v5,P(v5))

Vi

(0,NP)
*
*
*
*

(,NP)
(5,v1)
(5,v1)
*
*

(,NP)
(4,v1)
*
*
*

(,NP)
(,NP)
(12,v3)
(7,v2)
(7,v5)

(,NP)
(,NP)
(6,v3)
(6,v3)
*

0
4
5
6
7

V1
V3
V2
V5
V4

Recontraccin del primer camino mnimo desde el vrtice v1 a v4.


V4 {P(v4)}  v5 {P(v5)}  v3 {P(v3)}  v1 {P(v1)}.
Camino mnimo: v1  v3  v5  v4. La longitud del camino es 7.
Recontraccin del segundo camino mnimo desde el vrtice v1 a v4.
V4 {P(v4)}  v2 {P(v2)}  v1 {P(v1)}.
Camino mnimo: v1  v2  v4. La longitud del camino es 7.

Borrego Ropero Rafael


Recio Domnguez Daniel

58 de 248

Manual de algortmica
Ejemplo3

Borrego Ropero Rafael


Recio Domnguez Daniel

59 de 248

Manual de algortmica
Aplicamos el algoritmo de Dijkstra para encontrar el camino mnimo
entre el vrtice v1 y v4 obteniendo la siguiente tabla.
V1

(v2,P(v2))

(v3,P(v3))

(v4,P(v4))

(v5,P(v5))

Vi

(0,NP)
*
*
*
*

(,NP)
(1,v1)
*
*
*

(,NP)
(,NP)
(4,v2)
*
*

(,NP)
(,NP)
(,NP)
(,NP)
*

(,NP)
(,NP)
(,NP)
(,NP)
*

0
1
4

V1
V2
V3

En este caso observamos que el vrtice destino no tiene padre asignado, lo


cual nos indica que el grafo no es conexo, por lo que no existe ningn camino
entre el vrtice origen y destino.

Borrego Ropero Rafael


Recio Domnguez Daniel

60 de 248

Manual de algortmica

Algoritmo de Floyd.
El algoritmo de Floyd calcula el camino mnimo entre todos los pares de
vrtices del grafo ponderado y no negativo mediante tcnicas de programacin
dinmica.
Para ello calcularemos una serie de matrices Dk[i,j] que debe cumplir:

Dk-1[i, k]+ Dk-1[k, j] (pasando por k).


Dk[i, j] =
Dk-1[i, j] (no pasando por k).

Donde Dk[i, j] = mnimo(Dk-1[i,k] + Dk-1[k,j]), D[i][j]). Longitud del camino ms


corto para ir desde el vrtice i al vrtice j pudiendo pasar por los vrtices
1,2,..., hasta k.
Bsicamente la expresin anterior nos dice: si para ir desde el vrtice i al j
mejoramos pasando por el vrtice k, este se aade al camino.
Adems para reconstruir el camino se hace uso de una matriz de trayectorias
donde en cada iteracin si se mejora el camino desde el vrtice i al vrtice j
pasado por k, este se anota en la matriz de trayectorias.
El algoritmo de Floyd quedara:
Func floyd (ady: Array[1..n,1..n] de entero) dev(D: Array[1..n,1..n] de entero, p:
Array[1..n,1..n] de entero )
var
i,j,k: Entero
prin
desde i=1 hasta n
desde j=1 hasta n
desde k=1 hasta n
si k <> i y k<>j
si D[i,j] > D[i,k] + D[k,j]
D[i, j] := D[i,k] + D[k,j]
P[i,j] := k // Vrtice de paso.
fsi
fsi
fdesde
fdesde
fdesde

Borrego Ropero Rafael


Recio Domnguez Daniel

61 de 248

Manual de algortmica
fin

A continuacin veremos un ejemplo con ms detalle:


Ejemplo1

Calcularemos la sucesin de matrices Dk. Sea M[i,j] la matriz de


adyacencias del grafo.

M [j, j] =

V1
V2
V3
V4

V1 V2 V3 V4
0 5
50 0 15 5
30 0 15
15 5 0

Primera iteracin
D1 representa el camino ms corto para ir desde vrtice i al vrtice j
pudiendo pasar nicamente por el vrtice 1.

D1 =

V1 V2 V3 V4
V1 0 5
V2 50 0 15 5
V3 30 35 0 15
V4 15 20 5 0

Borrego Ropero Rafael


Recio Domnguez Daniel

P[i,j] =

V1
V2
V3
V4

V1 V2 V3 V4
0 0 0 0
0 0 0 0
0 1 0 0
0 1 0 0

62 de 248

Manual de algortmica

D2 representa el camino ms corto para ir desde vrtice i al vrtice j


pudiendo pasar nicamente por el vrtice 1 y 2.

D2 =

V1
V2
V3
V4

V1 V2 V3 V4
0 5 20 10
50 0 15 5
30 35 0 15
15 20 5 0

P[i,j] =

V1
V2
V3
V4

V1 V2 V3 V4
0 0 2 2
0 0 0 0
0 1 0 0
0 1 0 0

D3 representa el camino ms corto para ir desde vrtice i al vrtice j


pudiendo pasar nicamente por el vrtice 1, 2 y 3.

D3 =

V1
V2
V3
V4

V1 V2 V3 V4
0 5 20 10
45 0 15 5
30 35 0 15
15 20 5 0

P[i,j] =

V1
V2
V3
V4

V1 V2 V3 V4
0 0 2 2
3 0 0 0
0 1 0 0
0 1 0 0

D4 representa el camino ms corto para ir desde vrtice i al vrtice j


pudiendo pasar nicamente por el vrtice 1, 2, 3 y 4. En la ltima etapa se
consideran todos los vrtices del grafo.

D4 =

V1 V2 V3 V4
V1 0 5 15 10
V2 20 0 10 5
V3 30 35 0 15
V4 15 20 5 0

Borrego Ropero Rafael


Recio Domnguez Daniel

P[i,j] =

V1
V2
V3
V4

V1 V2 V3 V4
0 0 4 2
4 0 4 0
0 1 0 0
0 1 0 0

63 de 248

Manual de algortmica
Cmo se reconstruye el camino?.
Para ir desde un vrtice vi a un vrtice vj consultamos la posicin P[i,j] de la
matriz de trayectorias:
Si es 0 entonces existe camino directo para ir desde el vrtice i al j y
el camino se obtiene directamente.
En otro caso sea Vpaso = P[i,j]. Ahora visitamos la posicin P[Vpaso,j]
repitiendo el mismo proceso.
Reconstruccin del camino mnimo para ir desde el vrtice v2 al vrtice v3.
P[2,3] = 4 por lo que para ir de v2 a v3 es necesario pasar por el vrtice 4.
P[4,3] = 0 existe camino directo.

Camino mnimo: v2  v4  v3.

Borrego Ropero Rafael


Recio Domnguez Daniel

64 de 248

Manual de algortmica

3.2.- Algoritmos de distancias.


Excentricidad de un vrtice.

La excentricidad de un vrtice v de un grafo G es la distancia de v al


vrtice ms alejado de l, es decir, se trata de la mayor longitud del camino
ms corto entre el vrtice y cualquier otro.
Para implementar el algoritmo pueden seguirse los siguientes pasos:
1.- Calculamos Dijsktra desde el vrtice v a resto de vrtices del grafo.
2.- Finalmente de todos los caminos mnimos obtenidos tomamos la
longitud mayor.

Seguidamente veremos un ejemplo.


Para el grafo de la figura calcularemos la excentricidad del vrtice v1.

Distancia mnima
distmin(v1, v2)
distmin(v1, v3)
distmin(v1, v4)
distmin(v1, v5)

Borrego Ropero Rafael


Recio Domnguez Daniel

Valor camino mnimo


5
4
7
6

65 de 248

Manual de algortmica
La excentricidad es 7.

Borrego Ropero Rafael


Recio Domnguez Daniel

66 de 248

Manual de algortmica

Radio de un grafo.

El radio de un grafo G es la excentricidad ms pequea de cualquiera de


sus vrtices.
Para implementar el algoritmo pueden seguirse los siguientes pasos:
1.- Para cada vrtice obtenemos la excentricidad.
2.- Obtener la excentricidad ms pequea.

Veamos un ejemplo.

Para el grafo de la figura calcularemos el radio.

Distancia mnima
distmin(v1, v2)
distmin(v1, v3)
distmin(v1, v4)
distmin(v1, v5)

Borrego Ropero Rafael


Recio Domnguez Daniel

Valor camino mnimo


5
4
7
6

67 de 248

Manual de algortmica

Distancia mnima
distmin(v2, v1)
distmin(v2, v3)
distmin(v2, v4)
distmin(v2, v5)

Valor camino mnimo


5
5
2
3

Distancia mnima
distmin(v3, v1)
distmin(v3, v2)
distmin(v3, v4)
distmin(v3, v5)

Valor camino mnimo


4
5
3
2

Distancia mnima
distmin(v4, v1)
distmin(v4, v2)
distmin(v4, v3)
distmin(v4, v5)

Valor camino mnimo


7
2
3
1

Distancia mnima
distmin(v5, v1)
distmin(v5, v2)
distmin(v5, v3)
distmin(v5, v4)

Valor camino mnimo


6
3
2
1

Como sabemos la excentricidad de cada vrtice es la mayor longitud del


camino ms corto. A partir de los clculos realizados con anterioridad podemos
obtener una tabla con la excentricidad de cada vrtice.

v1 v2 v3 v4 v5
7 5 5 7 6

Para obtener el radio basta con obtener el mnimo del array.

Borrego Ropero Rafael


Recio Domnguez Daniel

68 de 248

Manual de algortmica

Dimetro de un grafo.

El dimetro de un grafo G es la mayor distancia existente entre dos


vrtices cualesquiera del grafo, es decir, es la excentricidad ms grande de
cualquiera de sus vrtices.
Para implementar el algoritmo pueden seguirse los siguientes pasos:
1.- Para cada vrtice obtenemos la excentricidad.
2.- Obtener la excentricidad mxima.

Veamos un ejemplo:

Para el grafo de la figura obtendremos el dimetro, aprovechado los


clculos anteriores realizados para el radio. El dimetro del grafo es 7.

Borrego Ropero Rafael


Recio Domnguez Daniel

69 de 248

Manual de algortmica

Distancia de un vrtice.

La distancia de un vrtice "v" en un grafo G ponderado o no, es la suma


de las distancias mnimas a todos los vrtices del grafo.

Para implementar el algoritmo pueden seguirse los siguientes pasos:


1.- Calcula Dijsktra para todos los vrtices del grafo.
2.- Sumar todas las distancias.
Si entre un vrtice v y otro cualquiera existiera ms de un camino
mnimo solo se tendr en cuenta un de los caminos a la hora sumar las
distancias.

Veamos un ejemplo:
Para el grafo de la figura calcular la distancia del vrtice v1 y v5.

Distancia mnima
distmin(v1, v2)
distmin(v1, v3)
distmin(v1, v4)
distmin(v1, v5)

Borrego Ropero Rafael


Recio Domnguez Daniel

Valor camino mnimo


5
4
7
6

70 de 248

Manual de algortmica
distancia
Distancia mnima
distmin(v5, v1)
distmin(v5, v2)
distmin(v5, v3)
distmin(v5, v4)
distancia

22
Valor camino mnimo
6
3
2
1
12

Antes de comentar los algoritmos de la mediana y el centro de un grafo


definiremos el concepto de subgrafo inducido por el conjunto de vrtices del
grafo.
Sea S un conjunto de vrtices no vaci de un grafo G. El subgrafo
inducido por S es el subgrafo maximal de G, con vrtices en el conjunto S.
Las aristas que forman parte del subgrafo inducido son todas las aristas de G
que inciden o unen vrtices de S.

Borrego Ropero Rafael


Recio Domnguez Daniel

71 de 248

Manual de algortmica

Algoritmo de la mediana.

La mediana de un grafo G es el subgrafo inducido por los vrtices que


tienen mnima distancia.
Para implementar el algoritmo pueden seguirse los siguientes pasos:
1.- Calcular la distancia de cada vrtice. .
2.- Escoger el subconjunto de vrtices de mnima distancia.
3.- Construir el subgrafo inducido por dicho conjunto de vrtices
obtenidos en el paso 2.

Veamos un ejemplo.
Calcular la mediana en el siguiente grafo.

distancia(V1)
distancia(v2)
distancia(v3)
distancia(v4)
distancia(v5)

Borrego Ropero Rafael


Recio Domnguez Daniel

22
15
14
13
12

72 de 248

Manual de algortmica
En este caso la mediana del grafo esta formada por un nico vrtice.
Dicho vrtice es v5.

Algoritmo del centro.

El centro de un grafo G, es el subgrafo inducido por los vrtices que


tienen excentricidad mnima.
Para implementar el algoritmo pueden seguirse los siguientes pasos:
1.- Para cada vrtice calculamos la excentricidad.
2.- Escoger el subconjunto de vrtices de mnima excentricidad.
3.- Construir el subgrafo inducido por dicho conjunto de vrtices
obtenidos en el paso 2.

Veamos un ejemplo

Aprovechamos el clculo de la excentricidad realizado anteriormente.


v1 v2 v3 v4 v5
7 5 5 7 6

Borrego Ropero Rafael


Recio Domnguez Daniel

73 de 248

Manual de algortmica
El subconjunto de vrtices de mnima excentricidad esta formado por los
vrtices v2 y v3.

Borrego Ropero Rafael


Recio Domnguez Daniel

74 de 248

Manual de algortmica

3.3.- Conectividad.
Algoritmo de componentes conexas.

Se trata de determinar si un grafo dirigido o no, es conexo o no lo es.


Podemos usar la propiedad de que si un grafo es conexo es porque existe
camino entre todo par de vrtices o, lo que es lo mismo, a partir de cualquier
vrtice es posible alcanzar a todos los dems.
Para la implementacin se realiza mediante tcnicas de programacin
dinmica. Se hace uso de un array en la que cada posicin hace referencia a
un vrtice del grafo.
Aquellas posiciones que al finalizar la ejecucin posean el mismo valor
estarn conectadas y formaran parte de la misma componente conexa.
Inicialmente se suponen todos los vrtices desconectados por lo que
todas las posiciones del array tienen un valor distinto.
Seguidamente se itera sobre las aristas o matriz de adyacencias del
grafo, de tal forma que si existe una aritas entre el vrtice correspondiente a la
fila i y columna j se almacena en dos variables la componente mayor y
menor respectivamente.
Acto seguido se itera sobre el array de componente de tal forma que
todas las posiciones donde el valor es igual a la componente mayor se
actualizan con el valor de la componente menor, es decir, a vrtices
conectados se les asigna el mismo valor y se pasa a la siguiente arista
repitiendo dicho proceso.
Tras iterar sobre todas las aristas el array almacena tantos nmeros
distintos como componentes conexas tiene el grafo. Dicha componente conexa
viene determinada por el subgrafo inducido de los vrtices que pertenecen a
dicha componente conexa.
Veamos un ejemplo

Borrego Ropero Rafael


Recio Domnguez Daniel

75 de 248

Manual de algortmica

v1 v2 v3 v4 v5 v6 Mayor Menor
1 2 3 4 5 6 *
*

En principio todos los vrtices estn desconectados.

v1 v2 v3 v4 v5 v6 Mayor Menor
1 2 3 1 5 6 4
1
El vrtice v1 y v4 estn conectados.
Actualizada la posicin del vrtice v4.

v1 v2 v3 v4 v5 v6 Mayor Menor
1 2 3 1 2 6 5
2

El vrtice v2 y v5 estn conectados.


Actualizada la posicin del vrtice v5.
v1 v2 v3 v4 v5 v6 Mayor Menor
1 2 3 1 2 3 6
3

El vrtice v3 y v6 estn conectados.


Actualizada la posicin del vrtice v6.
Como puede apreciarse el grafo posee tres componentes conexas que
son v1v4 , v2v5 y v3v6 .

Borrego Ropero Rafael


Recio Domnguez Daniel

76 de 248

Manual de algortmica

Vrtices de corte.

Sea G un grafo y v un vrtice de G. Se dice que v es un vrtice de


corte si al eliminar el vrtice del grafo este es no conexo, es decir, el nmero de
componentes conexas es mayor que uno.
La implementacin del algoritmo consta de los siguientes pasos:
1.-

Calculamos las componentes conexas que posee inicialmente el

grafo.
2.- Eliminamos un vrtice del grafo.
3.- En estas condiciones se calculan el nmero de componentes
conexas. Si el nmero de componentes actuales es distinto del nmero de
componentes calculadas inicialmente ms uno, entonces se trata de un vrtice
de corte.
4.- Restauramos el vrtice borrado, as como sus aristas y repetimos el
proceso con el resto de vrtices (ir al paso 2).
Ejemplo
El grafo posee tres vrtices de corte: v3, v4, v7. Basta observar que si
eliminamos algunos de estos vrtices el grafo no es conexo.

Borrego Ropero Rafael


Recio Domnguez Daniel

77 de 248

Manual de algortmica

Aristas puente.

Una arista e en un grafo G se dice que es una arista puente si al


eliminar la arista del grafo, este deja de ser conexo.
La implementacin del algoritmo consta de los siguientes pasos:
1.-

Calculamos las componentes conexas que posee inicialmente el

grafo.
2.- Eliminamos una arista del grafo.
3.- En estas condiciones se calculan el nmero de componentes
conexas. Si el nmero de componentes actuales es distinto del nmero de
componentes calculadas inicialmente entonces se trata de una arista puente.
4.- Restauramos la arista del grafo y repetimos el proceso para el resto
de aristas del grafo. (Ir al paso 2)

Ejemplo

Las aristas puentes son v4v5, v6v5 y v3v7.

Borrego Ropero Rafael


Recio Domnguez Daniel

78 de 248

Manual de algortmica
Bloques.

Un bloque B de un grafo G conexo es un subgrafo no separable de G y


mayor con esta propiedad. Los bloques permiten hacer una particin en el
conjunto de las aristas.
Un grafo conexo no trivial sin vrtices de corte recibe el nombre de grafo
no separable.
Un subgrafo G1 de G es maximal con respecto a una propiedad si no hay
ningn otro subgrafo que tambin posea esa propiedad y que contenga a G.

Algunas propiedades.

a) Si G es no separable G es un bloque.
b) Los bloques permiten hacer una particin del conjunto de las aristas.
c) Cada dos bloques a lo sumo tienen un vrtice en comn y este es un
vrtice de corte.
d) Un bloque con exactamente un vrtice de corte se denomina bloque
final.
e) Un grafo G conexo con al menos un vrtice de corte tiene como
mnimo dos bloques.
f) Una arista puente es considerada un bloque.

El algoritmo para el clculo de bloque consta de 6 pasos:

1.- Calcular los vrtices de corte y aristas puente del grafo.


2.- Eliminar los vrtices de corte del grafo (guardando las aristas).
3.- Calcular las componentes conexas.
4.- Restaurar los vrtices de corte junto con las aristas y eliminar las
aristas puente del grafo.

Borrego Ropero Rafael


Recio Domnguez Daniel

79 de 248

Manual de algortmica
5.- Para cada vrtice de corte y aristas de cada componente conexa.
Si G existe una arista formada por el vrtice de corte y el vrtice origen o
destino (o al contrario, es decir, el vrtice origen o destino y el vrtice de corte
en caso de ser un grafo dirigido) de una arista de la componente conexa
actualmente procesada almacenamos la arista formada por el vrtice de corte
en un conjunto S.
Una vez procesadas todas las aristas de la componente conexa actual,
aadimos todas las aristas almacenadas en S, a la componente actual,
obteniendo las aristas de uno de los bloques del grafo.
6.- Finalmente aadimos como bloques todas las aristas puente del
grafo a la vez que las restauramos en el grafo G.

A continuacin veremos un ejemplo para cada tipo de grafo.


Ejemplo para un grafo no dirigido.

PASO 1.

Vrtices de corte {v5}.


Aristas puente {v4v5, v5v6}.

Borrego Ropero Rafael


Recio Domnguez Daniel

80 de 248

Manual de algortmica
PASO 2.

Eliminamos el vrtice de corte y guardamos las aristas eliminadas


{v5v6, v5v4, v1v5, v3v5}.

PASO 3.

Componentes conexas {{v1v2, v1v3, v3v2}, {v4}, {v6}}.


PASO 4.

Restauramos el nico vrtice de corte v5 junto con las aristas


eliminadas {v5v6, v5v4, v1v5, v3v5} y eliminamos las aristas puente.

Borrego Ropero Rafael


Recio Domnguez Daniel

81 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

82 de 248

Manual de algortmica
PASO 5.

Comprobamos si en el grafo existe alguna arista formada por v5 y


algn vrtice de las aristas de la componente conexa. Este proceso se
realiza para cada una de las componentes conexas.
Componentes conexas {{v1v2, v1v3, v3v2}, {v4}, {v6}}.

Primera componente conexa {v1v2, v1v3, v3v2}.


Conjunto de aristas encontradas {v5v1, v5v3}.
Aadimos las aristas encontradas a la lista de aristas de la
primera componente conexa obteniendo las aristas del primer bloque.
Bloque 1 {v1v2, v1v3, v3v2, v5v1, v5v3}.
El resto de componentes conexas nos las saltamos, pues no
tienen aristas que procesar.

PASO 6

Finalmente aadimos las aristas puente como bloque del


grafo.
Bloque 2 {v4v5}.
Bloque 3 {v5v6}.

Bloques del grafo:

Bloque 1 {v1v2, v1v3, v3v2, v5v1, v5v3}.


Bloque 2 {v4v5}.
Bloque 3 {v5v6}.

Borrego Ropero Rafael


Recio Domnguez Daniel

83 de 248

Manual de algortmica
Ejemplo para un grafo dirigido.

PASO 1.

Vrtices de corte {v2, v3}.


Aristas puente {v2v3}.

Borrego Ropero Rafael


Recio Domnguez Daniel

84 de 248

Manual de algortmica
PASO 2.

Eliminamos el vrtice de corte y guardamos las aristas eliminadas


{v2v3, v2v5, v1v2, v4v2, v3v6, v3v7}.

PASO 3.

Componentes conexas {{v1v5, v5v4}, {v6v7}}.

Borrego Ropero Rafael


Recio Domnguez Daniel

85 de 248

Manual de algortmica
PASO 4.

Restauramos los vrtices de corte junto con las aristas eliminadas


{v2v3, v2v5, v1v2, v4v2, v3v6, v3v7} y eliminamos las aristas puente.

PASO 5.

Comprobamos si en el grafo existe alguna arista formada por


algn vrtice de corte y algn vrtice de las aristas de la componente conexa.
Este proceso se realiza para cada una de las componentes conexas.
Componentes conexas {{v1v5, v5v4}, {v6v7}}.
Primera componente conexa {v1v5, v5v4}.
Conjunto de aristas encontradas {v2v5, v1v2, v4v2}
Con el vrtice v3 no se encontr ninguna arista.
Aadimos las aristas encontradas a la lista de aristas de la
primera componente conexa obteniendo las aristas del primer bloque.
Bloque 1 {v1v5, v5v4, v2v5, v1v2, v4v2}.

Borrego Ropero Rafael


Recio Domnguez Daniel

86 de 248

Manual de algortmica
Segunda componente conexa {v6v7}.
Conjunto de aristas encontradas {v3v6, v3v7}.
Con el vrtice v2 no se encontr ninguna arista.
Aadimos las aristas encontradas a la lista de aristas de la
segunda componente conexa obteniendo las aristas del segundo bloque.
Bloque 2 {v6v7, v3v6, v3v7}.
PASO 6

Finalmente aadimos las aristas puente como bloque del grafo.


Bloque 3 {v2v3}.

Bloques del grafo:

Bloque 1 {v1v5, v5v4, v2v5, v1v2, v4v2}.


Bloque 2 {v6v7, v3v6, v3v7}.
Bloque 3 {v2v3}.

Borrego Ropero Rafael


Recio Domnguez Daniel

87 de 248

Manual de algortmica

3.4.- Algoritmos de bsquedas.


Bsqueda en profundidad (DFS) .

El algoritmo de recorrido en profundidad, en ingls depth-first search y


que denotaremos DFS para abreviar, permite obtener un rbol recubridor del
grafo original.
Si G es un grafo un grafo conexo, el algoritmo de bsqueda en
profundidad obtiene un rbol recubridor de G. Se trata de un grafo en el que
aparecen todos los vrtices de G, pero no todas sus aristas.
El rbol recubridor no es nico depende del vrtice de partida.
El algoritmo puede implementarse mediante una pila, de tal forma que el
vrtice activo o a partir del cual se expande el rbol siempre se encuentra en la
cima de la pila.
En cada paso se introduce en la pila unos de los vrtices adyacentes al
vrtice activo, aadindose al rbol recubridor la arista que une el vrtice activo
con dicho adyacente.
Puede ocurrir que el vrtice activo no posea adyacentes o que todos
hayan sido visitados con anterioridad y an no se han visitados todos los
vrtices del grafo, en tal caso el vrtice es retirado de la pila y continuamos con
el proceso con el nuevo vrtice activo.
El algoritmo termina cuando la pila est completamente vaca, lo que es
equivalente a decir que todos los vrtices del grafo han sido visitados.
Seguidamente detallaremos los pasos del algoritmo en un ejemplo.

Ejemplo

Borrego Ropero Rafael


Recio Domnguez Daniel

88 de 248

Manual de algortmica
Aplicaremos el algoritmo de bsqueda en profundidad comenzando por
el vrtice v1
Pila
v1
v1 v2
v1 v2 v3
v1 v2 v3 v5
v1 v2 v3
v1 v2 v3 v6
v1 v2 v3 v6 v4
v1 v2 v3 v6
v1 v2 v3
v1 v2
v1
Pila vaca

Vrtices
v2
v3
v5
*
v6
v4
*
*
*
*
*
*

Aristas
v1 v2
v2 v3
v3 v5
*
v3 v6
v6 v4
*
*
*
*
*
*

Visitados
v1 v2
v1 v2 v3
v1 v2 v3 v5
v1 v2 v3 v5
v1 v2 v3 v5 v6
v1 v2 v3 v5 v6 v4

La columna de vrtices visitados puede ser til para no introducir en la


pila vrtices considerados anteriormente. Adems afinando un poco mas y
aprovechado el conjunto de vrtices visitados podemos para la ejecucin del
algoritmo cuando dicho conjunto contenga todos los vrtices del grafo sin
necesidad de vaciar la pila.
Orden en el que se visitan los vrtices: v1, v2, v3, v5, v6 y v4.
Puede observarse que el rbol recubridor construido depende del vrtice
de partida y del orden en el que se visiten los adyacentes al vrtice activo.
rbol recubridor obtenido:

Borrego Ropero Rafael


Recio Domnguez Daniel

89 de 248

Manual de algortmica

Bsqueda en anchura (BFS) .

El algoritmo de recorrido en anchura, en ingls breadth-first search y que


denotaremos BFS para abreviar, al igual que el algoritmo de bsqueda en
profundidad permite obtener un rbol recubridor donde los vrtices son
recorridos por niveles.
Al igual que en el caso anterior, si el grafo es conexo se encuentra el
rbol recubridor, el cual no es nico, depender del vrtice de partida el orden
en que se visitan los vrtices adyacentes al vrtice activo.
El algoritmo puede implementarse mediante una cola, de tal forma que el
vrtice activo o a partir del cual se expande el rbol siempre se encuentra en la
cabeza de la cola.
En cada paso se introduce en la cola unos de los vrtices adyacentes al
vrtice activo, aadindose al rbol recubridor la arista que une el vrtice activo
con dicho adyacente. Los vrtices adyacentes son introducidos por el final de
la cola de tal forma que el vrtice activo no cambia, hasta que este se queda
sin adyacentes, en este momento el vrtice es extrado de la cola y se repite el
proceso con el resto de vrtices, hasta que todos los vrtices del grafo han
sido visitados.
Seguidamente detallaremos los pasos del algoritmo en un ejemplo.
Ejemplo

Borrego Ropero Rafael


Recio Domnguez Daniel

90 de 248

Manual de algortmica
Aplicaremos el algoritmo de bsqueda en anchura comenzando por el
vrtice v1.
Cola
v1
v2v1
v4 v2v1
v4 v2
v4 v2
v3v4 v2
v3v4
v3
v5 v3
v5
Cola vaca

Vrtices
v2
v4
v6
*
v3
*
*
v5
*
*
*

Aristas
v1 v2
v1 v4
v1 v6
*
v2v3
*
*
v3 v5
*
*
*

Visitados
v1 v2
v1 v2 v4
v1 v2 v4 v6
v1 v2 v4 v6
v1 v2 v4 v6 v3
v1 v2 v4 v6 v3
v1 v2 v4 v6 v3
v1 v2 v4 v6 v3 v5

La columna de vrtices visitados puede ser til para no introducir en la


cola vrtices considerados anteriormente. Adems afinando un poco mas y
aprovechado el conjunto de vrtices visitados podemos para la ejecucin del
algoritmo cuando dicho conjunto contenga todos los vrtices del grafo sin
necesidad de vaciar la cola.
Orden en el que se visitan los vrtices: v1, v2, v4, v6, v3 y v5.
Puede observarse que el rbol recubridor construido depende del vrtice
de partida y del orden en el que se visiten los adyacentes al vrtice activo.

rbol recubridor obtenido:

Borrego Ropero Rafael


Recio Domnguez Daniel

91 de 248

Manual de algortmica

3.5.- rboles recubridores de peso mnimo.


Se han implementado dos algoritmos que devuelven un rbol recubridor
o un bosque de peso mnimo si el grafo no es conexo.

Algoritmo de Boruvka.

El algoritmo de Boruvka obtiene un rbol recubridor mnimo en un grafo


G ponderado y conexo (no se admiten ponderaciones negativas).
El algoritmo de Boruvka consiste en elegir desde cada vrtice la arista
de menor peso que sale de l, y as formar al inicio un conjunto de
componentes de vrtices unidos por dichas aristas.
A partir de entonces en cada paso se busca la arista de menor peso
entre los vrtices de cada componente y un vrtice que no lo sea, es decir,
cada componente se unir a otra distinta. El algoritmo termina cuando todos los
vrtices del grafo pertenecen a la misma componente.
A este algoritmo tambin se le denomina "el algoritmo de las burbujas".
El grafo se cubre por una coleccin de burbujas y en cada paso cada burbuja
se adhiere a su burbuja ms cercana.
Aplicar Boruvka al siguiente grafo ponderado y conexo.

Borrego Ropero Rafael


Recio Domnguez Daniel

92 de 248

Manual de algortmica
Paso 1

Elegimos de cada vrtice la arista de menor para formar un conjunto de


componentes de vrtices.

Borrego Ropero Rafael


Recio Domnguez Daniel

93 de 248

Manual de algortmica
Paso 2

Buscamos las aristas de menor peso entre vrtices de componentes


distintas.

Como el grafo ya es conexo el algoritmo termina. El peso del rbol


recubridor es 16.

Borrego Ropero Rafael


Recio Domnguez Daniel

94 de 248

Manual de algortmica
Veamos otro ejemplo.

Paso 1

Elegimos de cada vrtice la arista de menor para formar un conjunto de


componentes de vrtices.

Borrego Ropero Rafael


Recio Domnguez Daniel

95 de 248

Manual de algortmica
Paso 2

Buscamos las aristas de menor peso entre vrtices de componentes


distintas.

Repetimos dicho proceso hasta que el grafo sea conexo.

Borrego Ropero Rafael


Recio Domnguez Daniel

96 de 248

Manual de algortmica

El grafo ya es conexo por lo que el algoritmo termina. El peso del rbol


recubridor es 66.

Borrego Ropero Rafael


Recio Domnguez Daniel

97 de 248

Manual de algortmica

Algoritmo de Prim.

El algoritmo de Prim obtiene un rbol recubridor mnimo en un grafo G


ponderado (no se admiten ponderaciones negativas) y conexo.
La implementacin del algoritmo se ha realizado partiendo de un vrtice
que puede proporcionar el usuario, aunque no es obligatorio. Adems sea cual
sea el vrtice de partida el rbol recubridor siempre tendr el mismo peso
mnimo.
El algoritmo comienza con un vrtice y en cada interaccin aade al
grafo una arista de peso mnimo la cual tiene como origen un vrtice
perteneciente al rbol parcialmente construido y como destino un vrtice
perteneciente al grafo G y que no formaba parte del rbol, de tal forma que no
pueda insertarse ningn ciclo.
Dicho proceso se lleva a cabo hasta que todos los vrtices de G han
sido visitados.
Veamos un ejemplo:

Aplicar Prim al siguiente grafo ponderado y conexo.

Borrego Ropero Rafael


Recio Domnguez Daniel

98 de 248

Manual de algortmica
Como vrtice de partida tomaremos el vrtice v1.

T0 = { v1}.
T1 = T0 + {v1, v6}.
T2 = T1 + {v1, v4}.
T3 = T2 + {v4, v7}.
T4 = T3 + { v4, v5}.
T5 = T4 + { v3, v5}.
T6 = T5 + { v2, v4}.
T7 = T6 + { v5, v8}.
Peso del rbol recubridor = 16.

rbol recubridor obtenido:

Borrego Ropero Rafael


Recio Domnguez Daniel

99 de 248

Manual de algortmica

Algoritmo de Kruskal.

El algoritmo de Kruskal obtiene un rbol recubridor de peso mnimo en


un grafo G ponderado (no se admiten ponderaciones negativas) y conexo. Si
el grafo G no es conexo obtiene un bosque de peso mnimo.
Como paso previo se realiza un preprocesamiento a las aristas del grafo
ordenndolas de menor a mayor segn su ponderacin.
En cada iteracin se aade una arista de peso mnimo que no forme
ciclo con el rbol recubridor parcialmente construido.
Dicho algoritmo se ha implementado mediante tcnicas de programacin
dinmica haciendo uso de una tabla en la que se van realizando una serie de
clculos previos para encontrar el rbol recubridor de peso mnimo.
Para llevar a cabo la implementacin se ha usado una tabla
bidimensional con la cual tiene un nmero de columnas igual al nmero de
aristas del grafo ms uno y el nmero de columna igual al nmero de vrtices.
Adems haremos uso de dos variables m y M para almacenar el valor
de la componente de menor y mayor respectivamente.
Para rellenar la tabla se debe siguientes los siguientes pasos.
Paso 1
La primera fila se rellena con el nmero de fila correspondiente al vrtice
en la matriz de adyacencias.
El resto de filas se corresponden con las aristas ordenadas de menor a
mayor peso.
Paso 2
Ahora rellenaremos las filas correspondientes con las aristas. Sea una
arista e1 que une los vrtice u y v.
En la fila anterior obtenemos el valor correspondiente a la columna que
indique u y v mediante la fila o columna correspondiente a la matriz de
adyacencias del grafo. El valor mximo se almacena en M y el valor mnimo
en m.
Si ambos valores son distintos entonces la arista forma parte del rbol
recubridor puesto que al aadirla no se introduce ningn ciclo.

Borrego Ropero Rafael


Recio Domnguez Daniel

100 de 248

Manual de algortmica
A continuacin podemos rellenar la fila correspondiente a dicha arista
teniendo en cuenta los valores calculados en la fila anterior.
Para obtener los valores de la fila correspondientes a la arista copiamos
los valores de la fila anterior excepto cuando el valor de la fila anterior sea igual
a M en cuyo caso se machara con el valor de la componente de menor m.
Este proceso se repite hasta que terminemos con todas las aristas del
grafo.

Veamos un ejemplo:

Aplicar Kruskal al siguiente grafo ponderado y conexo.

Borrego Ropero Rafael


Recio Domnguez Daniel

101 de 248

Manual
de algortmica
M arista
comp(v1) comp(v2) comp(v3) comp(v4) comp(v5) comp(v6) comp(v7) comp(v8) m
1
2
3
4
5
6
7
8
* *
*
e1={v1,v6}
1
2
3
4
5
1
7
8
1 6
e1
e2={v4,v5}
1
2
3
4
4
1
7
8
4 5
e2
e3={v4,v7}
1
2
3
4
4
1
4
8
4 7
e3
e4={v1,v4}
1
2
3
1
1
1
1
8
1 4
e4
1
2
1
1
1
1
1
8
1 3
e5
e5={v3,v5}
e6={v4,v6}
1
2
1
1
1
1
1
8
* *
*
1
2
1
1
1
1
1
8
* *
*
e7={v5,v7}
e8={v2,v4}
1
1
1
1
1
1
1
8
1 2
e8
1
1
1
1
1
1
1
8
* *
*
e9={v6,v7}
e10={v5,v8}
1
1
1
1
1
1
1
1
1 8
e10
arista

rbol recubridor de peso mnimo obtenido.


El peso del rbol recubridor es 16.

Borrego Ropero Rafael


Recio Domnguez Daniel

102 de 248

Manual de algortmica

3.6.- Prufer
Algoritmo de codificacin.

Una secuencia de Prfer de longitud n-2 para n2 es cualquier


secuencia de enteros entre 1 y n, permitiendo repeticiones.
El algoritmo de codificacin que se presenta aqu, parte de un rbol
(grafo) para dar lugar a una secuencia de Prfer que lo determina
unvocamente.
Como observacin se puede comprobar que el grado de cada uno de los
vrtices es uno ms que el nmero de veces que su etiqueta aparece en la
secuencia de Prfer.
El algoritmo recibe como entrada un rbol A de n vrtices y retorna una
secuencia S de n-2 vrtices.

Implementacin:
func codificacinPrufer (g: Grafo) dev(S: secuencia de vrtices)
var
a: entero
prin
S := <inicializar a vaca>
// Nmero de aristas del grafo.
a := g.obtenerNmeroAristas()
mientras a-1 > 0
Encontrar un vrtice v de A de grado 1.
Sea v-w la arista que incide en v.
Introducir w en S.
Eliminar la arista v-w del grafo.
a := a-1

Borrego Ropero Rafael


Recio Domnguez Daniel

103 de 248

Manual de algortmica
fmientras
fin
La bsqueda del vrtice de grado 1 (hoja) se realiza en la matriz de
adyacencias del grafo comenzando de izquierda a derecha y de arriba abajo a
partir de la fila correspondiente al vrtice v.
Una vez que se encuentra la hoja w eliminamos arista formada por los
vrtices v-w para no volver a tenerla en cuenta.
Para determinar si un vrtice es hoja sumamos la fila correspondiente a
dicho vrtice, si el valor de la suma es 1 se trata de una hoja.

Obtener la codificacin de Prfer del siguiente rbol.

Matriz de adyacencias del grafo.


v1
v2
v3
v4
v5
v6
v7

Borrego Ropero Rafael


Recio Domnguez Daniel

v1 v2
0 1
1 0
1
1
1
1
1

v3
1

v4

v5
1

v6

v7

104 de 248

Manual de algortmica
La primera hoja encontrada es el vrtice v3 y v3-v1 es la arista que incide
en v3.
Eliminamos dicha arista y aadimos v1 a la secuencia.
S = {v1}.

v1
v2
v3
v4
v5
v6
v7

v1
0
1

v2
1
0

1
1

v3

v4

v5
1

v6

v7

El rbol nos quedara

Borrego Ropero Rafael


Recio Domnguez Daniel

105 de 248

Manual de algortmica
La primera hoja encontrada es el vrtice v4 y v4-v2 es la arista que incide
en v4.
Eliminamos dicha arista y aadimos v2 a la secuencia.
S = {v1, v2}.

v1
v2
v3
v4
v5
v6
v7

v1 v2
0 1
1 0

1
1
1
1

v3

v4

v5
1

v6

v7

El rbol nos quedara

Borrego Ropero Rafael


Recio Domnguez Daniel

106 de 248

Manual de algortmica
La primera hoja encontrada es el vrtice v5 y v5-v1 es la arista que incide
en v5.
Eliminamos dicha arista y aadimos v1 a la secuencia.
S = {v1, v2, v1}.

v1
v2
v3
v4
v5
v6
v7

v1
0
1

v2
1
0

1
1

v3

v4

v5

v6

v7

El rbol nos quedara

Borrego Ropero Rafael


Recio Domnguez Daniel

107 de 248

Manual de algortmica
La primera hoja encontrada es el vrtice v6 y v6-v2 es la arista que incide
en v6.
Eliminamos dicha arista y aadimos v2 a la secuencia.
S = {v1, v2, v1, v2}.

v1
v2
v3
v4
v5
v6
v7

v1
0
1

v2
1
0

v3

v4

v5

v6

v7

El rbol nos quedara

Borrego Ropero Rafael


Recio Domnguez Daniel

108 de 248

Manual de algortmica
La primera hoja encontrada es el vrtice v7 y v7-v2 es la arista que incide
en v7.
Eliminamos dicha arista y aadimos v2 a la secuencia.
S = {v1, v2, v1, v2, v2}.

v1
v2
v3
v4
v5
v6
v7

v1
0
1

v2
1
0

v3

v4

v5

v6

v7

El rbol nos quedara

Como el tamao de la secuencia es n-2 el algoritmo termina, siendo n el


nmero de vrtices del rbol el algoritmo termina.

Borrego Ropero Rafael


Recio Domnguez Daniel

109 de 248

Manual de algortmica

Algoritmo de decodificacin.

El procedimiento de decodificacin siguiente convierte una secuencia de


Prfer en su correspondiente rbol.
Este procedimiento de decodificacin establece una funcin fd: Pn-2  Tn
que hace corresponder a un conjunto de secuencias de Prfer de longitud n-2
un conjunto de rboles de n vrtices.
El algoritmo recibe como entrada el nmero de vrtices n que debe
tener el rbol a generar y una secuencia S de n-2 vrtices. Los vrtices de la
secuencia forman parte del rbol y pueden estar repetidos. A partir de la
secuencia proporcionada se genera un rbol.
El algoritmo podemos dividirlo en X pasos.

PASO 1

Crear un grafo G con n vrtices. (Sin aristas).

PASO 2

2.1.- Calcular el conjunto de vrtices que no forma parte de la


secuencia NS.
2.2.- Calcular el conjunto de vrtices ocupados VO.
2.3.- Obtener la diferencia entre ambos conjuntos NS VO.

PASO 3

Si la secuencia es vaca insertamos una arista formada por los


dos vrtices incluidos en NS VO y FIN.
En otro caso insertamos la arista que tiene como origen el primer
vrtice de la secuencia y como destino el primer vrtice de la diferencia
NS VO. Seguidamente eliminar el primer vrtice de la secuencia y
volver al PASO 2.

Borrego Ropero Rafael


Recio Domnguez Daniel

110 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

111 de 248

Manual de algortmica
Veamos el siguiente ejemplo:

Sea n = 7 y la secuencia S = {v1, v2, v4, v6, v2}.

PASO 1

Sea G el grafo:

Borrego Ropero Rafael


Recio Domnguez Daniel

112 de 248

Manual de algortmica
PASO 2.1

Secuencia

S = {v1, v2, v4, v6, v2}.

Vrtices no incluidos en la secuencia

NS = {v3, v5, v7}.

Vrtices ocupados VO = {}.

PASO 3.1

Como la secuencia no est vaca formamos una arista que posee


como origen el primer vrtice de la secuencia y como destino el primer vrtice
de la diferencia entre NS y VO.
Calculamos la diferencia entre NS y VO.
NS VO = {v3, v5, v7}.
Insertamos en G la nueva arista
secuencia.

Borrego Ropero Rafael


Recio Domnguez Daniel

v1-v3 y eliminamos v1 de la

113 de 248

Manual de algortmica

PASO 2.2

Secuencia

S = {v2, v4, v6, v2}.

Vrtices no incluidos en la secuencia

NS = {v1, v3, v5, v7}.

Vrtices ocupados VO = {v3}.


PASO 3.2

Como la secuencia no est vaca formamos una arista que posee


como origen el primer vrtice de la secuencia y como destino el primer vrtice
de la diferencia entre NS y VO.
Calculamos la diferencia entre NS y VO.
NS VO = {v1, v5, v7}.
Insertamos en G la nueva arista
secuencia.

Borrego Ropero Rafael


Recio Domnguez Daniel

v2-v1 y eliminamos v2 de la

114 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

115 de 248

Manual de algortmica

PASO 2.3

Secuencia

S = {v4, v6, v2}.

Vrtices no incluidos en la secuencia NS = {v1, v3, v5, v7}.


Vrtices ocupados VO = {v1, v3}.
PASO 3.3

Como la secuencia no est vaca formamos una arista que posee


como origen el primer vrtice de la secuencia y como destino el primer vrtice
de la diferencia entre NS y VO.
Calculamos la diferencia entre NS y VO.
NS VO = {v5, v7}.
Insertamos en G la nueva arista
secuencia.

Borrego Ropero Rafael


Recio Domnguez Daniel

v4-v5 y eliminamos v4 de la

116 de 248

Manual de algortmica
PASO 2.4

Secuencia

S = {v6, v2}.

Vrtices no incluidos en la secuencia NS = {v1, v3, v4, v5, v7}.


Vrtices ocupados VO = {v1, v3, v5}.
PASO 3.4

Como la secuencia no est vaca formamos una arista que posee


como origen el primer vrtice de la secuencia y como destino el primer vrtice
de la diferencia entre NS y VO.
Calculamos la diferencia entre NS y VO.
NS VO = {v4, v7}.
Insertamos en G la nueva arista
secuencia.

Borrego Ropero Rafael


Recio Domnguez Daniel

v6-v4 y eliminamos v6 de la

117 de 248

Manual de algortmica
PASO 2.5

Secuencia

S = {v2}.

Vrtices no incluidos en la secuencia NS = {v1, v3, v4, v5, v6, v7}.


Vrtices ocupados VO = {v1, v3, v4, v5}.
PASO 3.5

Como la secuencia no est vaca formamos una arista que posee como origen
el primer vrtice de la secuencia y como destino el primer vrtice de la
diferencia entre NS y VO.
Calculamos la diferencia entre NS y VO.
NS VO = {v6, v7}.
Insertamos en G la nueva arista
secuencia.

Borrego Ropero Rafael


Recio Domnguez Daniel

v2-v6 y eliminamos v2 de la

118 de 248

Manual de algortmica
PASO 2.6

Secuencia

S = {}.

Vrtices no incluidos en la secuencia NS = {v1, v2, v3, v4, v5, v6, v7}.
Vrtices ocupados VO = {v1, v3, v4, v5, v6}.
PASO 3.6

Como la secuencia est vaca solo nos falta insertar una arista.
Los vrtices que forman parte de la misma se obtienen calculando la diferencia
entre NS y VO.
Calculamos la diferencia entre NS y VO.
NS VO = {v2, v7}.
Insertamos en G la nueva arista v2-v7 y FIN.

Borrego Ropero Rafael


Recio Domnguez Daniel

119 de 248

Manual de algortmica

3.7.- Algoritmo de emparejamientos


Un emparejamiento de un grafo simple G, es cualquier subgrafo
1-regular de G, es decir un subgrafo inducido por las aritas dos a dos no
incidentes entre s)
Un emparejamiento mximo en un grafo G es cualquier emparejamiento
de G de orden mximo, es decir, con el mayor nmero de vrtices posibles.
Un emparejamiento maximal de peso ptimo en un grafo G es un
emparejamiento de G de orden mximo donde la suma de las ponderaciones
de las aristas es mxima o mnima.
Un emparejamiento es completo o perfecto si tiene exactamente p/2
aristas, siendo p el orden del grafo.
Sea M un emparejamiento, se denomina arista emparejada respecto de
M a cada una de las aristas de G que estn en M. Si dicha arista no esta en
M se dice que no esta emparejada.
Se llaman vrtice emparejado con respecto a M a cada uno de los
vrtices incidentes con alguna arista de M, en otro caso se trata de un vrtice
no emparejado.
Una vez que tenemos claros los conceptos anteriores comentaremos los
tres algoritmos de emparejamientos.

Borrego Ropero Rafael


Recio Domnguez Daniel

120 de 248

Manual de algortmica

Algoritmo de emparejamiento maximal simple

La implementacin del algoritmo trata de buscar un emparejamiento


mediante un camino alternado. Se denomina camino alternado de G con
respecto a M a un camino de G cuyas aristas son alternativamente
emparejadas y no emparejada.
En cada paso se escoge un vrtice no emparejado y busca un camino
alternado aumentante mediante BFS. En el camino no pueden a parecer
vrtices repetidos. Dicho camino deja de expandirse en cuanto encontremos un
vrtice de G que no haya sido emparejado. Repetimos este proceso para el
resto de vrtice del grafo. Al final obtendremos un emparejamiento maximal
que puede ser completo si todos los vrtices del grafo han sido emparejados.
Veamos un ejemplo:

Borrego Ropero Rafael


Recio Domnguez Daniel

121 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

122 de 248

Manual de algortmica
Comenzamos por el vrtice v1
formado por las aristas.

y construimos el camino alternado

M = {v1, v6}.
A continuacin pasamos al vrtice v2. M = {v2, v8}.

Para el vrtice v3 = {v3,v7}

Borrego Ropero Rafael


Recio Domnguez Daniel

123 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

124 de 248

Manual de algortmica
Para el vrtice v4 = {v4, v9}.

Para el vrtice v5 = {{v5, v9}, {v4, v6}, {v1, v7}, {v2, v8}, {v3, v10}}

Borrego Ropero Rafael


Recio Domnguez Daniel

125 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

126 de 248

Manual de algortmica
Finalmente el emparejamiento nos queda.

Borrego Ropero Rafael


Recio Domnguez Daniel

127 de 248

Manual de algortmica

Algoritmo de Kuhn-Munkres

Se trata de un algoritmo de emparejamiento de peso mximo para grafos


ponderados, bipartitos y completos.
Los grafos bipartitos completos km,n, son grafos de (n + m) vrtices y
(m * n) aristas que admiten una particin de sus vrtices en sendos conjuntos V
y U de m y n vrtices respectivamente, de manera que cada uno de los m
vrtices de V es adyacente a todos y cada uno de los n vrtices de U. Se
denominan bipartitos completos porque no se pueden aadir arista alguna sin
que deje de ser bipartito.
Otro concepto importante es el de matriz de pesos del grafo. Se trata de
una matriz que posee tantas filas y columnas como elementos tiene los
conjuntos X e Y respectivamente. Cada posicin de la matriz almacena la
ponderacin de una arita cuyo origen pertenece al conjunto X y el destino al
conjunto Y.
Ahora explicaremos de forma detallada los cuatro pasos en los que
hemos dividido el algoritmo.

PASO 1

P.1.1.- Identificar los conjuntos V y U de vrtices.


P.1.2.- Obtener la matriz de pesos del grafo MatrizPesos.
Sean i y j los ndices para iterar por la matriz de pesos del grafo.
P.1.3.- Consideremos las tuplas L(vi) y L(uj) con un tamao igual al
nmero de vrtices que forman parte del conjunto V y U respectivamente.
Inicializamos las tuplas con un etiquetado viable
L(vi) se inicializa con el mximo de la fila correspondiente al
vrtice vi en MatrizPesos[i, j] con (j <= | V |) (cardinal de V).
L(uj) se inicializa a cero para todo uj.

Borrego Ropero Rafael


Recio Domnguez Daniel

128 de 248

Manual de algortmica
PASO 2

Seguidamente construimos un grafo que verifique la expresin:


L(uj) + L(vi) = MatrizPesos[i, j].
var
G: Grafo.
I, j: enteros
prin
G := <inicializamos el grafo>
// Iteramos sobre la matriz de pesos del grafo, si se cumple la expresin
// incluimos la arista al grafo g con la ponderacin correspondiente.
desde i := 0 hasta | V |
desde j := 0 hasta | U |
si L(uj) + L(vi) = MatrizPesos[i, j]
G.aadirArista(u, v, MatrizPesos[i, j])
fsi
fdesde
fdesde
fin

PASO 3

P.3.1.- Buscamos un emparejamiento mximo M en el grafo G con el


algoritmo de emparejamiento maximal simple.
P.3.2.- Si cada vrtice de V est emparejado con respecto a M, entonces
retorna M y FIN.

Borrego Ropero Rafael


Recio Domnguez Daniel

129 de 248

Manual de algortmica
PASO 4

A continuacin cambiamos las etiquetas de los conjuntos L(vi) y L(uj).


Sea V(T) los vrtices del el primer camino alternado enraizado en un
vrtice no emparejado del conjunto V que no puede ser extendido ms en G.
P.4.1.- Para ello obtenemos los siguientes conjuntos.
I = V V(T).
D = U V(T).

P.4.2.- Calculamos el valor que minimiza la expresin:


L(vi) + L(uj) MatrizPesos[i, j] con vi y ui pertenecientes a los
conjuntos I y D respectivamente.

P.4.3.- Finalmente cambiamos el etiquetado.


Para cada vrtice vi perteneciente a la interseccin restamos el valor del
mnimo en L(vi).
Para cada vrtice ui no perteneciente a la diferencia sumamos el valor
del mnimo en L(ui).
Volvemos al PASO 2.

Borrego Ropero Rafael


Recio Domnguez Daniel

130 de 248

Manual de algortmica
Consideremos el siguiente grafo al cual aplicaremos el algoritmo de
Kuhn-Munkres.

PASO 1
Identificamos los conjuntos U y V.
U = {u1, u2, u3, u4, u5}.
V = {v1, v2, v3, v4, v5}.
Matriz de pesos del grafo, L(vi) y L(uj)

V/U
v1
v2
v3
v4
v5
L(uj)

Borrego Ropero Rafael


Recio Domnguez Daniel

u1
5
0
2
2
6
0

u2
1
1
5
2
2
0

u3
1
3
4
3
0
0

u4
3
3
3
4
0
0

u5
2
4
0
4
1
0

L(vi)
5
4
5
4
6

131 de 248

Manual de algortmica
PASO 2.1

Construimos un grafo G2.1 que verifique la expresin


L(uj) + Lv(vi) = MatrizPesos[i, j].

Borrego Ropero Rafael


Recio Domnguez Daniel

132 de 248

Manual de algortmica
PASO 3.1

Buscamos un emparejamiento mximo en G2.1.

Como no se ha conseguido un emparejamiento mximo para los vrtices


del conjunto V cambiamos el etiquetado.

Borrego Ropero Rafael


Recio Domnguez Daniel

133 de 248

Manual de algortmica
PASO 4.1

v5 es el primer vrtice no emparejado perteneciente a V.


V(T) es el conjunto de vrtices del rbol alternado enraizado en
v5 que no puede ser extendido ms.
V(T) = {v5, v1, u1}.
Calculamos los siguientes conjuntos.
V V(T) = {v5, v1}.
V V(T) = {u2, u3, u4, u5}.
Minimizamos la expresin L(uj) + L(vi) MatrizPesos[i, j] para los vrtices
que forman parte de los conjuntos I y D.
L(v5) + L(u2) - 2 = 4.
L(v5) + L(u3) - 0 = 6.
L(v5) + L(u4) - 0 = 6.
L(v5) + L(u5) - 1 = 5.
L(v1) + L(u2) - 1 = 4.
L(v1) + L(u3) - 1 = 4.
L(v1) + L(u4) - 3 = 2.
L(v1) + L(u5) - 2 = 3.
El mnimo es 2.
Ahora restamos el valor del mnimo a los vrtices que forman
parte del conjunto I en L(vi) y sumamos el valor del mnimo a los vrtices que
no forman parte del conjunto D en L(uj). Y volvemos al paso 2
V/U
v1
v2
v3
v4
v5

Borrego Ropero Rafael


Recio Domnguez Daniel

u1
5
0
2
2
6

u2
1
1
5
2
2

u3
1
3
4
3
0

u4
3
3
3
4
0

u5
2
4
0
4
1

L(vi)
3
4
5
4
4

134 de 248

Manual de algortmica
L(uj) 2

Borrego Ropero Rafael


Recio Domnguez Daniel

135 de 248

Manual de algortmica
PASO 2.2

Construimos un grafo G2.2 que verifique la expresin


L(uj) + Lv(vi) = MatrizPesos[i, j].

Como no se ha conseguido un emparejamiento mximo para los vrtices


del conjunto V cambiamos el etiquetado.

Borrego Ropero Rafael


Recio Domnguez Daniel

136 de 248

Manual de algortmica
PASO 3.2

Buscamos un emparejamiento mximo en G2.2.

Borrego Ropero Rafael


Recio Domnguez Daniel

137 de 248

Manual de algortmica
PASO 4.2

v5 es el primer vrtice no emparejado perteneciente a V.


V(T) es el conjunto de vrtices del rbol alternado enraizado en
v5 que no puede ser extendido ms.
V(T) = {v5, v1, u1, v4, u4, v2, u5}.
Calculamos los siguientes conjuntos.
V V(T) = {v5, v1, v4, v2}.
V V(T) = {u2, u3}.
Minimizamos la expresin L(uj) + L(vi) MatrizPesos[i, j] para los vrtices
que forman parte de los conjuntos I y D.
L(v5) + L(u2) - 2 = 4.
L(v5) + L(u3) - 0 = 4.
L(v1) + L(u2) - 1 = 2.
L(v1) + L(u3) - 1 = 2.
L(v4) + L(u2) - 2 = 2.
L(v4) + L(u3) - 3 = 1.
L(v2) + L(u2) - 1 = 3.
L(v2) + L(u3) - 3 = 1.
El mnimo es 1.
Ahora restamos el valor del mnimo a los vrtices que forman
parte del conjunto I en L(vi) y sumamos el valor del mnimo a los vrtices que
no forman parte del conjunto D en L(uj). Y volvemos al paso 2
V/U
v1
v2
v3
v4
v5

Borrego Ropero Rafael


Recio Domnguez Daniel

u1
5
0
2
2
6

u2
1
1
5
2
2

u3
1
3
4
3
0

u4
3
3
3
4
0

u5
2
4
0
4
1

L(vi)
2
3
5
3
3

138 de 248

Manual de algortmica
L(uj) 3

Borrego Ropero Rafael


Recio Domnguez Daniel

139 de 248

Manual de algortmica
PASO 2.3

Construimos un grafo G2.3 que verifique la expresin


L(uj) + Lv(vi) = MatrizPesos[i, j].

Borrego Ropero Rafael


Recio Domnguez Daniel

140 de 248

Manual de algortmica
PASO 3.3

Buscamos un emparejamiento mximo en G2.3.

Como todos los vrtices del conjunto V estn emparejados el algoritmo


termina.
El peso del emparejamiento es 21.

Borrego Ropero Rafael


Recio Domnguez Daniel

141 de 248

Manual de algortmica

Algoritmo de Kuhn-Munkres con preprocesamiento (peso mnimo).

El algoritmo de Kuhn-Munkres se utiliza para obtener un emparejamiento


de peso mximo en un grafo bipartito, ponderado y completo. Tambin
podemos usarlo para obtener el emparejamiento de peso mnimo aunque
previamente es necesario realizar un preprocesamiento a las ponderaciones de
las aristas del grafo.
El preprocesamiento cambia las ponderaciones de las aristas
manteniendo la relacin de orden, pero las aristas que antes eran mnimas
ahora son mximas por lo que bastara aplicar el algoritmo de Kuhn-Munkres y
deshacer los cambios en las ponderaciones de las aristas para obtener el
emparejamiento de peso mnimo.

PREPROCESAMIENTO.

1.- Calcular la ponderacin mxima de todas las aristas del grafo.

2.- Para cada arista cambiamos su peso por:


| PesoArista PonderacinMaxima |.

3.- Finalmente aplicamos el algoritmo de Kuhn-Munkres y obtenemos el


emparejamiento de peso mnimo.

Borrego Ropero Rafael


Recio Domnguez Daniel

142 de 248

Manual de algortmica
Encontrar el emparejamiento de peso mnimo en el siguiente grafo.

Realizar el preprocesamiento.
La arista v5u1 es la que posee mayor ponderacin en el grafo. Su
peso es 6.

Borrego Ropero Rafael


Recio Domnguez Daniel

143 de 248

Manual de algortmica
Ahora cambiamos las ponderaciones de las aristas.

A continuacin aplicaremos el algoritmo de Kuhn-Munkres obteniendo un


emparejamiento de peso mximo que nos dar las aristas de peso mnimo
cuando deshagamos los cambios realizados en el preprocesamiento.
Aristas del emparejamiento de peso mximo:
Arista (v1, u3, 5).
Arista (v2, u1, 6).
Arista (v3, u5, 6).
Arista (v4, u2, 4).
Arista (v5, u4, 6).
El peso del emparejamiento es 27.

Borrego Ropero Rafael


Recio Domnguez Daniel

144 de 248

Manual de algortmica
Deshacemos los cambios en las ponderaciones obteniendo el peso
original de las aristas.
Aristas del emparejamiento de peso mnimo:
Arista (v1, u3, 1).
Arista (v2, u1, 0).
Arista (v3, u5, 0).
Arista (v4, u2, 2).
Arista (v5, u4, 0).
El peso del emparejamiento es 3.

Borrego Ropero Rafael


Recio Domnguez Daniel

145 de 248

Manual de algortmica

Algoritmo de emparejamiento maximal de peso ptimo.

El problema de bsquedas de emparejamientos mximo de peso ptimo


(mximo o mnimo) es un problema NP-completo. Aunque existen mtodos
aproximados se ha optado por un algoritmo de bsqueda exhaustiva,
implementado mediante la tcnica de backtracing.
El esquema que implementa el backtracing:
proc btptimo(x: Etapa)
var
xsig: Etapa
cand: Candidatos
prin
si (esSolucin(x))
si (esMejor())
actualizaSolucin()
fsi
fsi
xsig := nuevaEtapa(x)
cand := calculaCandidatos(x)
mientras (quedanCandidatos(cand))
seleccionaCandidato(cand, xsig);
si (esPrometedor(cand, xsig))
anotaSolucin(cand, xsig);
btOptimo(xsig);
cancelaAnotacin(cand, xsig);
fsi
fmientras
fin

A continuacin comentaremos algunas caractersticas del problema que


se pretende resolver y detallaremos cada uno de los mtodos y clases que
hacen posible la bsqueda del emparejamiento de peso ptimo.

Borrego Ropero Rafael


Recio Domnguez Daniel

146 de 248

Manual de algortmica
Comenzaremos por la Clase Solucin
Clase Solucin
// Atributos
emparejamientos: Array[][] de enteros.
/// Almacena el peso del emparejamiento.
pesoEmparejamiento: real
/// Nmero de vrtices emparejados.
numVrticesEmparejados: entero
fclase
La matriz emparejamientos se inicializa con 0 excepto la diagonal
principal y posiciones en las que o existe aritas que se inicializa con infinito o
menos infinito dependiendo si el emparejamiento buscado es de peso mnimo o
mximo respectivamente.
Adems a lo largo de la ejecucin almacena las parejas encontradas a
las cuales les asignan un nmero que hace referencia al orden en el que se
han encontrado.
La profundidad al que se encuentra la solucin que viene determinada
por el nmero mximo de vrtices que pueden ser emparejados, pero
determinar esto en un grafo no es trivial, por ello en cada etapa marcamos la
fila y columna de los vrtices emparejados con el valor de la etapa para que no
vuelvan a ser considerados y saber cuando terminamos el proceso de
bsqueda de parejas. Dicho proceso finaliza cuando la matriz
emparejamientos no contiene ningn 0. Esto se comprueba en el mtodo
esSolucin.
Adems si emparejamiento buscado es de peso mnimo puede aplicarse
una poda al rbol de expansin si hemos encontrado previamente una posible
solucin. La poda de una rama se produce si el peso del emparejamiento
encontrado es menor o igual que el peso del emparejamiento parcialmente
construido. En dicho caso la rama no es examinada.
Si por el contrario el emparejamiento buscado es de peso mximo ser
necesario expandir el rbol completo, pues no es posible aplicar ninguna poda.
Por otra parte como se trata de un problema de optimizacin una
solucin se considera mejor otra, si existe un mayor nmero de vrtices
emparejados o si el nmero de vrtices emparejados es igual en ambas
soluciones se comprueba el peso y en funcin del tipo de emparejamiento se
escoge la solucin de mayor o menor peso. Esta comprobacin se realiza en el
mtodo esMejor. Cada vez que encontremos una solucin mejor

Borrego Ropero Rafael


Recio Domnguez Daniel

147 de 248

Manual de algortmica
actualizaremos la solucin obtenida hasta el momento, lo cual se realiza en el
mtodo actualizaSolucin.

Clase Candidatos
Clase Candidatos
// Atributos
vrticesSinPareja: Array[] de enteros;
// ndice para iterar sobre el array de candidatos.
i: entero
fila: entero
fclase

En el array vrticesSinPareja almacenamos las columnas de los


vrtices que an no tienen parejas.
El atributo fila indica la fila en la matriz de adyacencias donde se
encontraron los vrtices candidatos.
Los candidatos de una etapa son las columnas de los vrtices an
no emparejados escogidos de la primera fila de la matriz
emparejamientos en la que aparece un 0.

Clase Etapa
// Atributos
// Profundidad del rbol de expansin
k: entero
// Candidato actualmente procesado.
i: entero
fclase

El valor inicial de la etapa y candidato actualmente procesado


comienzan en 0.

Borrego Ropero Rafael


Recio Domnguez Daniel

148 de 248

Manual de algortmica
Ahora detallaremos los atributos de la clase que da cuerpo a cada uno
de los mtodos del esquema.

Clase EmparejamientoMaximalPesoOptimoBacktracking
// Atributos
// Matriz de adyacencias del grafo.
adyacencias: Array[][] de real
tipoEmparejamineto: Lgico
// Fila del vrtice sin pareja.
fila: entero
// Columna del vrtice sin pareja
columna: entero
// Almacena las soluciones parciales encontradas
sol: Solucin
// Almacena la solucin ptima encontrada.
solptima: Solucin
fclase
El atributo tipoEmparejamiento informa del tipo de emparejamiento
buscado por el usuario. Si su valor es cierto buscamos un emparejamiento de
peso mximo, en otro caso de peso mnimo.
Por ltimo comentar algunos detalles del resto de mtodos del esquema.
En el mtodo nuevaEtapa tan solo incrementamos el valor de la etapa
actual.
En quedanCandidatos se comprueba si el atributo i utilizado para
iterar sobre el array verticesSinpareja que almacena los candidatos ha
llegado al final del array.
En selecionaCandidato actualizamos los atributos fila y columna del
vrtice no emparejado. Adems se incrementa el ndice del candidato usado
para iterar sobre el array que almacena los vrtices sin pareja y asignamos
dicho valor al atributo que indica en la etapa el candidato que se esta
procesando actualmente.
En anotaSolucin se marca la fila y columna de los vrtices
emparejados con el valor -k de la etapa. Por otra parte posicin de la matriz 2

Borrego Ropero Rafael


Recio Domnguez Daniel

149 de 248

Manual de algortmica
emparejamientos correspondiente al emparejamiento se marca con el valor
k de la etapa indicando el orden en el que se ha encontrado la pareja.
Tambin incrementamos en dos el nmero de vrtices emparejados y
actualizamos el peso del emparejamiento parcialmente construido con el peso
de la nueva arista considerada.
Finalmente en cancelaAnotacin decrementamos el valor k y
restauramos el valor del candidato actualmente de la etapa. Adems se
restaura el valor de la fila y columna, se desmarcan la fila y columnas de los
ltimos vrtices emparejados. Tambin restauramos el valor del peso del
emparejamiento y vrtice emparejados con el valor que tenan antes de
considerar la nueva pareja. En definitiva las tpicas operaciones que deben
aparecer en toda vuelta atrs.
A continuacin veremos un par de ejemplos donde encontrar el
emparejamiento ptimo es trivial, pero son tiles para visualizar el rbol de
expansin generado. Adems a la hora de mostrar los candidatos pondremos
los propios vrtices en vez de la posicin que estos ocupan en la matriz de
adyacencias.
Emparejamiento mximo de peso mximo.

Borrego Ropero Rafael


Recio Domnguez Daniel

150 de 248

Manual de algortmica

rbol de expansin:
Etapa

k=0

k=1

v1
v2
v3
v4

v1

-1
-1
-1

v2
1

-1
-1

v3
-1
-1

v4
-1
-1
0

v1
v2
v3
v4

v1

0
0
0

v2
0

0
0

v3
0
0

v4
0
0
0

v1
v2
v3
v4

v1

-1
-1
-1

v2
-1

-1
0

v3
1
-1

-1

v4
-1
0
-1

{v4}
peso = 2

k=2

v1
v2
v3
v4

v1

-1
-1
-1

v2
1

-1
-1

v3
-1
-1

-2

{v2, v3, v4}


peso = 0

v1
v2
v3
v4

v1

-1
-1
-1

{v4}
peso = 10

v4
-1
-1
2

v1
v2
v3
v4

peso = 5

v1

-1
-1
-1

v2
-1

-1
-2

v3
1
-1

-1

v4
-1
2
-1

peso = 14

v2
-1

0
-1

v3
-1
0

-1

{v3}
peso = 4

v1
v2
v3
v4

v1

-1
-1
-1

v2
-1

-2
-1

v3
-1
2

-1

peso = 9

El emparejamiento ptimo de peso mximo es 14.


En este caso ha sido necesario expandir todo el rbol para obtener el
emparejamiento de peso mximo con el mayor nmero de vrtices.
Aristas del emparejamiento:
Arista (v1, v3, 10)
Arista (v2, v4, 4)

Borrego Ropero Rafael


Recio Domnguez Daniel

v4
1
-1
-1

151 de 248

v4
1
-1
-1

Manual de algortmica
Emparejamiento mximo de peso mnimo.

rbol de expansin:
Etapa

k=0

k=1

v1
v2
v3
v4

v1

-1
-1
-1

v2
1

-1
-1

v3
-1
-1

v4
-1
-1
0

v1
v2
v3
v4

v1

0
0
0

v2
0

0
0

v3
0
0

v4
0
0
0

v1
v2
v3
v4

v1

-1
-1
-1

v2
-1

-1
0

v3
1
-1

-1

v4
-1
0
-1

{v4}
peso = 2

k=2

v1
v2
v3
v4

v1

-1
-1
-1

v2
1

-1
-1

v3
-1
-1

-2

{v2, v3, v4}


peso = 0

v1
v2
v3
v4

v1

-1
-1
-1

{v4}
peso = 10

v4
-1
-1
2

peso = 5

v2
-1

0
-1

v3
-1
0

-1

{v3}
peso = 4

v1
v2
v3
v4

v1

-1
-1
-1

v2
-1

-2
-1

v3
-1
2

-1

peso = 9

El emparejamiento ptimo de peso mnimo es 5.


En este caso no ha sido necesario expandir todo el rbol pues ya
tenamos una solucin cuyo peso es 5 y por la segunda rama el
emparejamiento parcialmente construido tiene peso 10 por lo que no es posible
mejorar el emparejamiento encontrado inicialmente.
Aristas del emparejamiento:
Arista (v1, v2, 2)

Borrego Ropero Rafael


Recio Domnguez Daniel

v4
1
-1
-1

152 de 248

v4
1
-1
-1

Manual de algortmica
Arista (v3, v4, 3)

Borrego Ropero Rafael


Recio Domnguez Daniel

153 de 248

Manual de algortmica
Seguidamente un par de ejemplos para grafos con un mayor nmero de
vrtices y aritas.
Ejemplo 1.

Aristas del emparejamiento de peso mximo:

Arista (v1, u4, 3).


Arista (v2, u3, 3).
Arista (v3, u2, 5).
Arista (v4, u5, 4).
Arista (v5, u1, 6).
El peso del emparejamiento es 21.

Borrego Ropero Rafael


Recio Domnguez Daniel

154 de 248

Manual de algortmica
Aristas del emparejamiento ptimo de peso mnimo:

Arista (v1, u3, 1).


Arista (v2, u1, 0).
Arista (v3, u5, 0).
Arista (v4, u2, 2).
Arista (v5, u4, 0).
El peso del emparejamiento es 3.

Ejemplo 2.

Aristas del emparejamiento ptimo de peso mximo:

Arista (v1, v5, 4).


Arista (v2, v6, 1).
El peso del emparejamiento es 5.

Borrego Ropero Rafael


Recio Domnguez Daniel

155 de 248

Manual de algortmica

Aristas del emparejamiento ptimo de peso mnimo:

Arista (v1, v4, 2).


Arista (v2, v5, -1).
El peso del emparejamiento es 1.

Borrego Ropero Rafael


Recio Domnguez Daniel

156 de 248

Manual de algortmica

3.8.- Euler
Es euleriano ?.
Un grafo simple conexo es euleriano si y solo si todos los vrtices tienen
valencia par.
Si el grafo es dirigido y el grado de entrada y salida de cada vrtice de
es igual entonces es euleriano.
La implementacin del algoritmo hace distincin entre grafos simples y
dirigidos.
Si se trata de un grafo simple se suma las filas de la matriz de
adyacencias para cada vrtice y si todos tienen valencia par entonces el grafo
es euleriano. En caso contrario el grafo no es euleriano.
Si el grafo es dirigido se calcula el grado de entrada sumado la fila y el
grado de salida sumando la columna correspondiente al vrtice en la matriz de
adyacencias del grafo. Si el grado de entrada y salida de todos los vrtices es
igual entonces el grafo es euleriano.

A continuacin veremos dos ejemplos para cada tipo de grafo.


Grafos simples.
Ejemplo 1

Borrego Ropero Rafael


Recio Domnguez Daniel

157 de 248

Manual de algortmica

Vrtices grado
v1
4
v2
4
v3
4
v4
2
v5
2
v6
2
v7
2
Como todos los vrtices son de valencia par el grafo es euleriano.

Ejemplo 2.

Vrtices grado
v1
3
v2
4
v3
4
v4
2
v5
2
v6
1

Borrego Ropero Rafael


Recio Domnguez Daniel

158 de 248

Manual de algortmica
Como el grafo posee dos vrtices impares no es euleriano.

Borrego Ropero Rafael


Recio Domnguez Daniel

159 de 248

Manual de algortmica
A continuacin expondremos los ejemplos para los grafos dirigidos.
Grafos dirigidos.
Ejemplo 1

Vrtices Entrada Salida


v1
2
2
2
2
v2
v3
2
2
v4
2
2
v5
3
3
v6
2
2
v7
1
1
Como todos los vrtices tienen el grado de salida igual al grado de
entrada el grafo es euleriano.

Borrego Ropero Rafael


Recio Domnguez Daniel

160 de 248

Manual de algortmica
Ejemplo 2

Vrtices Entrada Salida


v1
2
2
v2
2
1
v3
2
1
v4
2
2
1
1
v5
Como existen vrtices cuyo grado de salida es distinto al grado de
entrada el grafo no es euleriano.

Borrego Ropero Rafael


Recio Domnguez Daniel

161 de 248

Manual de algortmica

3.9.- Algoritmos de bsqueda de trayectorias eulerianas.


Antes de comenzar a exponer los diversos algoritmos que tratan de
buscar trayectorias eulerianas en los grafos debemos tener claro una serie de
conceptos.
Comenzaremos definiendo
el concepto de trayectoria como una
sucesin de vrtices con la propiedad de que cada vrtice es adyacente al
siguiente y tal que en la correspondiente sucesin de aristas todas son
distintas. Adems esta permitido que un vrtice aparezca ms de una vez.
Si dicha trayectoria comienza y termina en el mismo vrtice tenemos un
circuito.
Una vez definido el concepto general de trayectoria nos centraremos en
las trayectorias eulerianas la cual recorre todas las aristas de un grafo conexo.
Anlogamente si termina y comienza en el mismo vrtice se trata de un circuito
euleriano.
A continuacin comentaremos tres algoritmos que se encargan de
buscar trayectorias eulerianas.
Para que en un grafo conexo exista una trayectoria euleriana es
necesario que el grafo no posea ms de dos vrtices de valencia impar, por lo
que si un grafo conexo que tiene exactamente dos vrtices de valencia impar
tiene al menos una trayectoria euleriana. Cualquier trayectoria de Euler debe
comenzar en uno de los vrtices de grado impar y finalizar en el otro.
Sin embargo para que exista al menos un circuito euleriano todos los
vrtices deben tener grado par y el circuito puede construirse partiendo desde
cualquier vrtice.

Algoritmo de Fleury

El algoritmo de Fleury trata de buscar una trayectoria euleriana en un


grafo conexo y en el que no existen ms de dos vrtices de grado impar.
La implementacin del algoritmo se ha realizado mediante tcnicas de
programacin dinmica combinada con voraz.
La heurstica seguida para encontrar la trayectoria euleriana es la
siguiente. Se comprueba que previamente que el grafo satisface las
condiciones para que exista dicha trayectoria.

Borrego Ropero Rafael


Recio Domnguez Daniel

162 de 248

Manual de algortmica

Seguidamente no situamos en unos de los vrtices impares si existen o


en caso contrario uno cualquiera de grado par.
A continuacin de todos los vrtices adyacentes respecto al que
estamos situados escogemos el primero segn orden existente en la matriz de
adyacencias y al ser posible que no sea una arista puente salvo que no exista
ninguna otra alternativa.
Una vez seleccionada la arista, esta no vuelve a tenerse en cuenta por lo que
es como si la hubiramos eliminado del grafo.
Repetimos este proceso hasta recorrer todas las aristas del grafo, pudiendo
repetir vrtices.
Si el grafo es no dirigido la trayectoria se encuentra sin problemas, sin
embargo en grafos dirigidos puede no encontrarse dicha trayectoria si el grafo
posee ms de un vrtice impar. En este caso lo nico que podemos hacer es
relanzar la bsqueda partiendo del otro vrtice impar.
Veamos algunos ejemplos:
Encontrar una trayectoria euleriana en el siguiente grafo no dirigido.

Vrtices Grado
v1
2
2
v2
v3
3
v4
3
v5
2
v6
2

Borrego Ropero Rafael


Recio Domnguez Daniel

163 de 248

Manual de algortmica
v7

Como posee dos vrtices impares y el grafo es no dirigido posee una


trayectoria euleriana abierta.
Los vrtices impares son v3 y v4.
Comenzamos por el primer vrtice impar v3.
v3  v1

v3  v1  v2
La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael


Recio Domnguez Daniel

164 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

165 de 248

Manual de algortmica
v3  v1  v2  v3
La ltima arista tomada es puente, pues no existe ninguna alternativa.

v3  v1  v2  v3  v4
La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael


Recio Domnguez Daniel

166 de 248

Manual de algortmica
v3  v1  v2  v3  v4  v5

v3  v1  v2  v3  v4  v5  v6
La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael


Recio Domnguez Daniel

167 de 248

Manual de algortmica
v3  v1  v2  v3  v4  v5  v6  v7
La ltima arista tomada es puente, pues no existe ninguna alternativa.

v3  v1  v2  v3  v4  v5  v6  v7  v4.
La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael


Recio Domnguez Daniel

168 de 248

Manual de algortmica
Encontrar una trayectoria euleriana en el siguiente grafo dirigido.

Vrtices Entrada Salida


v1
2
2
1
1
v2
v3
1
1
v4
2
2
v5
2
1
v6
0
1
El grafo no es euleriano pues existen vrtices con grado de entrada y
salida distintos, concretamente v5 y v6. En este caso podemos intentar
encontrar dicha trayectoria partiendo de algunos de los vrtices anteriores.

Borrego Ropero Rafael


Recio Domnguez Daniel

169 de 248

Manual de algortmica
Los vrtices con grado de entrada distinto del grado de salida son v5 y v6.
Comenzamos por el primer vrtice impar v5.
v5  v4

v5  v4  v1

Borrego Ropero Rafael


Recio Domnguez Daniel

170 de 248

Manual de algortmica

v5  v4  v1  v2

v5  v4  v1  v2  v3

Borrego Ropero Rafael


Recio Domnguez Daniel

171 de 248

Manual de algortmica

v5  v4  v1  v2  v3  v4
La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael


Recio Domnguez Daniel

172 de 248

Manual de algortmica

v5  v4  v1  v2  v3  v4  v2
La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael


Recio Domnguez Daniel

173 de 248

Manual de algortmica
v5  v4  v1  v2  v3  v4  v2  v5 .
La ltima arista tomada es puente, pues no existe ninguna alternativa.

En el siguiente paso nos damos cuenta que el vrtice v5 no posee ningn


vrtice adyacente por lo que no se ha encontrado la trayectoria buscada pues
no se han recorrido todas las aristas. En este caso lo nico que podemos hacer
comenzar a construir la trayectoria desde el otro vrtice impar.

Borrego Ropero Rafael


Recio Domnguez Daniel

174 de 248

Manual de algortmica
Comenzamos por el primer vrtice impar v6.
v6  v1

v6  v1  v2

Borrego Ropero Rafael


Recio Domnguez Daniel

175 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

176 de 248

Manual de algortmica
v6  v1  v2  v3

v6  v1  v2  v3  v4
La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael


Recio Domnguez Daniel

177 de 248

Manual de algortmica

v6  v1  v2  v3  v4  v1

v6  v1  v2  v3  v4  v1  v5
La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael


Recio Domnguez Daniel

178 de 248

Manual de algortmica

v6  v1  v2  v3  v4  v1  v5  v4

v6  v1  v2  v3  v4  v1  v5  v4  v2

Borrego Ropero Rafael


Recio Domnguez Daniel

179 de 248

Manual de algortmica

La ltima arista tomada es puente, pues no existe ninguna alternativa.

Borrego Ropero Rafael


Recio Domnguez Daniel

180 de 248

Manual de algortmica
v6  v1  v2  v3  v4  v1  v5  v4  v2  v5.

En este caso partiendo desde el otro vrtice impar es posible encontrar la


trayectoria euleriana abierta pero puede ocurrir que dicha trayectoria no exista.

Borrego Ropero Rafael


Recio Domnguez Daniel

181 de 248

Manual de algortmica
Veamos un ejemplo de grafo dirigido el que solo existen dos vrtices de
grado impar pero no existe una trayectoria euleriana.

Vrtices Entrada Salida


v1
0
2
v2
3
1
v3
1
1
v4
1
1
v5
1
1
En este caso no existe trayectoria euleriana pues es imposible visitar las
aristas v1v2 y v1v5 si partimos del vrtice v2. Si por el contrario partiramos del
vrtice v1 no podramos recorrer todas las que salen de dicho vrtice pues el
grado de entrada es cero. Como conclusin podemos decir que en grafos
dirigidos existe una trayectoria euleriana si el grado de entrada y salida de cada
vrtice son iguales, en otro caso la trayectoria puede no existir.
Seguidamente expondremos dos algoritmos encargados de buscar
trayectorias eulerianas cerradas en cualquier tipo de grafos, pero con
estrategias claramente distintas.
Por ello en ambos se exige que los grafos cumplan ciertas restricciones.
Si se trata de un grafo no dirigido todos los vrtices deben ser de grado par y si
es no dirigido los grados de entrada y salida de cada vrtice deben ser
idnticos para garantizar la existencia del ciclo euleriano.
Teniendo claro lo anteriormente comentado pasaremos a explicar
detalladamente las estrategias de ambos algoritmos.

Borrego Ropero Rafael


Recio Domnguez Daniel

182 de 248

Manual de algortmica

Algoritmo de Tucker.

Tras comprobar las condiciones que permiten la ejecucin del algoritmo


se siguen dos estrategias segn el tipo de grafo.
Si el grafo es no dirigido para cada vrtice cuyo grado es mayor que dos
se duplica hasta conseguir que reducir su grado a dos, en caso de ser un grafo
dirigido duplicamos aquellos vrtices cuyo grado de entrada o salida sean
distintos de uno hasta reducirlos a ese valor.
Al final del proceso tenemos una lista de vrtices duplicados y los
respectivos vrtices con los que se identifica. Adems cabe mencionar que el
nmero de aristas del grafo original se conserva, lo nico que pueden aumentar
es el nmero de vrtices.
Una vez concluido el proceso de duplicacin el grafo queda dividido en
un conjunto de componentes conexas a partir de las cuales iremos
reconstruyendo los ciclos a la misma vez que identificamos los vrtices
duplicados con el vrtice resultado de la duplicacin para dejar el grafo como
estaba originalmente.
Para terminar de comprender el algoritmo veremos un par de ejemplos.

Borrego Ropero Rafael


Recio Domnguez Daniel

183 de 248

Manual de algortmica
Aplicaremos el algoritmo de Tucker al siguiente grafo no dirigido.

Vrtices Grado
v1
4
v2
4
v3
2
4
v4
v5
2
v6
2
v7
2
v8
2
2
v9
v10
2
v11
2
v12
2

Los vrtices cuyo grado es mayor que dos son v1, v2 y v4. Estos vrtices
sern duplicados hasta conseguir reducir el grado a dos para cada uno de
ellos.

Borrego Ropero Rafael


Recio Domnguez Daniel

184 de 248

Manual de algortmica
Duplicamos el vrtice v1 dando el vrtice v13.

Duplicamos el vrtice v2 dando el vrtice v14.

Borrego Ropero Rafael


Recio Domnguez Daniel

185 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

186 de 248

Manual de algortmica
Finalmente para que todos los vrtices posean grado 2 duplicamos el
vrtice v4 dando el vrtice v15.

Tras el proceso de duplicacin el grafo queda dividido en un conjunto de


componentes conexas concretamente cuatro y tenemos una lista de vrtices
duplicados y el correspondiente vrtice con el que se identifica.

Vrtice duplicado Vrtice con el que se identifica


v1
v13
v2
v14
v4
v15
Ahora reconstruiremos el grafo y la trayectoria euleriana cerrada
identificando los vrtices duplicados.
Si el grafo ha sido dividido en varias componentes conexas tomamos un
vrtice de la lista de duplicados tal que el vrtice duplicado y el vrtice con el
que se identifica estn en componentes conexas distintas comenzando por las
primeras posiciones de la tabla anterior. Adems en ese caso en la primera
iteracin reconstruiremos dos ciclos y los reensamblaremos por el final.

Borrego Ropero Rafael


Recio Domnguez Daniel

187 de 248

Manual de algortmica
Si el grafo solo posee una componente conexa reconstruir la trayectoria
es trivial, viene determinada por el propio grafo, bastar identificar los vrtices
duplicados y al mismo tiempo actualizarlos en la trayectoria.
En este caso escogemos el vrtice duplicado v4 y el vrtice resultado de
la duplicacin v15.
Reconstruimos los dos ciclos identificando el vrtice.
Primer ciclo {v4-v7-v8-v9-v4}.
Segundo ciclo {v4-v3-v1-v2-v4}.
Identificamos el vrtice y reensamblamos los ciclos.

Ciclo reensamblado {v4-v7-v8-v9-v4-v3-v1-v2-v4}.


Como el grafo an no es conexo escogemos de la lista de vrtices
duplicados uno que no haya sido considerado y cuyo vrtice duplicado
pertenezca a la trayectoria parcialmente construida para que sea ms fcil la
concatenacin del nuevo ciclo.
Por lo que escogemos el vrtice duplicado v2 y el vrtice resultado de la
duplicacin v14

Borrego Ropero Rafael


Recio Domnguez Daniel

188 de 248

Manual de algortmica
Reconstruimos el ciclo identificando el vrtice {v2-v5-v6-v2}

Borrego Ropero Rafael


Recio Domnguez Daniel

189 de 248

Manual de algortmica
Identificamos el vrtice.

Reensamblamos el nuevo ciclo en la trayectoria parcialmente construida


por el final.
{v4-v7-v8-v9-v4-v3-v1-v2-v5-v6-v2-v4}.
Finalmente escogemos el vrtice duplicado v1 y el vrtice resultado de la
duplicacin v13.
Construimos el ciclo identificando el vrtice {v1-v10-v11-v12-v1}
Por ltimo identificamos los vrtices y reensamblamos el ciclo por el final
en la trayectoria euleriana parcialmente construida obteniendo la trayectoria
cerrada completa.

Borrego Ropero Rafael


Recio Domnguez Daniel

190 de 248

Manual de algortmica

Trayectoria euleriana cerrada {v4-v7-v8-v9-v4-v3-v1-v10-v11-v12-v1-v2-v4}.

Borrego Ropero Rafael


Recio Domnguez Daniel

191 de 248

Manual de algortmica
Veamos otro ejemplo

Vrtices Grado
v1
4
v2
2
v3
2
4
v4
v5
2
v6
2

Los vrtices cuyo grado es mayor que dos son v1 y v4. Estos vrtices
sern duplicados hasta conseguir reducir el grado a dos para cada uno de
ellos.

Borrego Ropero Rafael


Recio Domnguez Daniel

192 de 248

Manual de algortmica
Duplicamos el vrtice v1 dando el vrtice v7.

Para terminar de conseguir que todos los vrtices tengan grado 2


duplicaremos el vrtice v4 dando el vrtice v8.

Vrtice duplicado Vrtice con el que se identifica


v1
v7
v4
v8

Borrego Ropero Rafael


Recio Domnguez Daniel

193 de 248

Manual de algortmica
Como el grafo ha sido dividido 2 componentes conexas tomamos un
vrtice de la lista de duplicados tal que el vrtice duplicado y el vrtice con el
que se identifica estn en componentes conexas distintas comenzando por las
primeras posiciones la tabla anterior. Adems en ese caso en la primera
iteracin reconstruiremos dos ciclos y los reensamblaremos por el final.
En este caso escogemos el vrtice duplicado v4 y el vrtice resultado de
la duplicacin v8.
Reconstruimos los dos ciclos identificando el vrtice.
Primer ciclo {v4-v1-v2-v3-v4}.
Segundo ciclo {v4-v5-v7-v6-v4}.
Identificamos el vrtice y reensamblamos los ciclos.

Ciclo reensamblado {v4-v1-v2-v3-v4-v5-v7-v6-v4}.


El grafo ya es conexo por lo que solo nos queda identificar el resto de
vrtices si existen para obtener la trayectoria euleriana cerrada.

Borrego Ropero Rafael


Recio Domnguez Daniel

194 de 248

Manual de algortmica
Identificamos el ltimo vrtice duplicado que nos queda v1 con v7.

Identificamos el vrtice en la trayectoria {v4-v1-v2-v3-v4-v5-v1-v6-v4}.

Borrego Ropero Rafael


Recio Domnguez Daniel

195 de 248

Manual de algortmica
Finalmente detallaremos un ejemplo para un grafo dirigido.

Vrtices Entrada Salida


v1
3
3
v2
1
1
1
1
v3
v4
1
1
v5
2
2
v6
1
1
v7
1
1
1
1
v8
v9
1
1
Como se trata de un grafo dirigido debemos conseguir que todos los
vrtices tengan grado de entrada y salida igual a 1, por lo que duplicaremos los
vrtices v1 y v5.

Borrego Ropero Rafael


Recio Domnguez Daniel

196 de 248

Manual de algortmica
Duplicamos el vrtice v1 dando el vrtice v10.

Duplicamos el vrtice v1 dando el vrtice v11.

Borrego Ropero Rafael


Recio Domnguez Daniel

197 de 248

Manual de algortmica
Duplicamos el vrtice v5 dando el vrtice v12.

Una vez que los grados de entrada y salida de todos los vrtices son
iguales a 1 comenzamos el proceso reconstruccin de la trayectoria euleriana
cerrada e identificacin de vrtices para dejar el grafo como estaba
originalmente.

Vrtice duplicado Vrtice con el que se identifica


v1
v10
v1
v11
v5
v12
Como es la primera iteracin reconstruiremos dos ciclos. Buscamos un
vrtice duplicado y vrtice con el que se identifica de tal forma que pertenezcan
a componentes conexas distintas.
En este caso escogemos comenzando por las primeras posiciones de la
tabla el vrtice duplicado v1 y el vrtice resultado de la duplicacin v1.
Reconstruimos los dos ciclos identificando el vrtice.
Primer ciclo {v1-v2-v3-v1}.
Segundo ciclo {v1-v9-v1}.

Borrego Ropero Rafael


Recio Domnguez Daniel

198 de 248

Manual de algortmica
Identificamos el vrtice y reensamblamos los ciclos.

Ciclo reensamblado {v1-v2-v3-v1-v9-v1}.


Como el grafo an no es conexo escogemos de la lista de vrtices
duplicados uno que no haya sido considerado y cuyo vrtice duplicado
pertenezca a la trayectoria parcialmente construida para que sea ms fcil la
concatenacin del nuevo ciclo.
Por lo que escogemos el vrtice duplicado v1 y el vrtice resultado de la
duplicacin v11.
Construimos el ciclo identificando el vrtice {v1-v4-v12-v6-v7-v5-v8-v1}.
Identificamos el vrtice.

Borrego Ropero Rafael


Recio Domnguez Daniel

199 de 248

Manual de algortmica

Reensamblamos los ciclos {v1-v2-v3-v1-v9-v1-v4-v12-v6-v7-v5-v8-v1}.


Como el grafo ya es conexo tan solo nos falta identificar el resto de
vrtices duplicados.
Finalmente identificamos el vrtice duplicado v5 y el vrtice resultado de
la duplicacin v12 y obtenemos la trayectoria euleriana cerrada.

Identificamos el vrtice en la trayectoria {v1-v2-v3-v1-v9-v1-v4-v5-v6-v7-v5-v8-v1}.

Borrego Ropero Rafael


Recio Domnguez Daniel

200 de 248

Manual de algortmica

Algoritmo de Hierholzer.

Tras comprobar las condiciones que permiten la ejecucin del algoritmo,


seguimos la siguiente estrategia independientemente del tipo de grafo.
Nos situamos en un vrtice cualquiera y construimos un ciclo. Si todas
las aristas del grafo han sido visitadas tenemos la trayectoria euleriana en otro
caso partimos de un vrtice que forme parte de la trayectoria euleriana
parcialmente construida y que an le queden adyacentes por considerar.
Partiendo de este vrtice construimos otro ciclo y lo reensamblamos con el
obtenido anteriormente comenzando por el principio de la lista que almacena la
trayectoria euleriana.
Para construir el ciclo basta coger en cada iteracin un adyacente del
vrtice en el cual nos encontramos. El vrtice actual en cada iteracin es el
adyacente obtenido. Dicho proceso se repetir hasta llegar al vrtice de partida.
Este proceso se realiza hasta que todas las aritas del grafo hayan sido
visitadas.
Veamos algunos ejemplos para terminar de comprender el algoritmo.

Aplicar el algoritmo de Hierholzer al siguiente grafo no dirigido.

Borrego Ropero Rafael


Recio Domnguez Daniel

201 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

202 de 248

Manual de algortmica
El primer ciclo podemos construirlo partiendo de cualquier vrtice del
grafo, por ejemplo v5.
Obtenemos el ciclo {v5-v2-v1-v3-v4-v2-v6-v5}.
A continuacin obtenemos otro ciclo partiendo de un vrtice
perteneciente al ciclo anteriormente encontrado para que sea ms fcil la
concatenacin de ambos.
Partimos del vrtice v1 y obtenemos el ciclo {v1-v10-v11-v12-v1}.
Ahora reensamblamos los ciclos:
{v5-v2-v1-v10-v11-v12-v1-v3-v4-v2-v6-v5}.
Como an no se han recorrido todas las aristas del grafo obtendremos
otro ciclo partiendo de un vrtice contenido en los ciclos concatenados con
anterioridad. Por lo que podemos partir del vrtice v4, obteniendo el ciclo
{v4-v7-v8-v9-v4}.
Ahora concatenamos los ciclos y obtenemos la trayectoria euleriana
cerrada.
{v5-v2-v1-v10-v11-v12-v1-v3-v4-v7-v8-v9-v4-v2-v6-v5}.

Borrego Ropero Rafael


Recio Domnguez Daniel

203 de 248

Manual de algortmica
Veamos un ejemplo para un grafo dirigido.

El primer ciclo podemos construirlo partiendo de cualquier vrtice del


grafo, por ejemplo v3.
Obtenemos el ciclo {v3-v1-v2-v3}.
A continuacin obtenemos otro ciclo partiendo de un vrtice
perteneciente al ciclo anteriormente encontrado para que sea ms fcil la
concatenacin de ambos.
Partimos del vrtice v1 y obtenemos el ciclo {v1-v4-v5-v6-v7-v5-v8-v1}.
Ahora reensamblamos los ciclos:
{v3-v1-v4-v5-v6-v7-v5-v8-v1-v2-v3}.
Como an no se han recorrido todas las aristas del grafo obtendremos
otro ciclo partiendo de un vrtice contenido en los ciclos concatenados con
anterioridad. Por lo que podemos partir del vrtice v1, obteniendo el ciclo
{v1-v9-v1}.
Ahora concatenamos los ciclos y obtenemos la trayectoria euleriana
cerrada.
{v3-v1-v9-v1-v4-v5-v6-v7-v5-v8-v1-v2-v3}.

Borrego Ropero Rafael


Recio Domnguez Daniel

204 de 248

Manual de algortmica

Problema del cartero

Este problema modeliza numerosas situaciones de la vida real como es


la recogida de basura de una ciudad, repartos de mercancas, en definitiva
situaciones donde se sale de punto y es necesario llegar o pasar por un
conjunto de zonas y regresar a dicho punto minimizando el coste del trayecto.
Tradicionalmente se conoce como problema del cartero debido al trabajo
que esta persona realizan, puesto que un cartero debe salir de la oficina,
repartir todas las cartas a todas las casas y volver a la oficina minimizando el
coste del recorrido.
El objetivo encontrar un recorrido cerrado de coste ptimo que pase por
todas las aristas del grafo, pudiendo repetir las que sean necesarias.
El algoritmo podemos dividirlo en cinco pasos bien diferenciados que
detallaremos a continuacin.

PASO 1
Obtener los vrtices impares del grafo.

PASO 2
Formar el grafo completo kn con los vrtices impares.
La ponderacin de las aristas del grafo anterior viene determinada por la
distancia del camino mnimo en el grafo original entre cada par de vrtice del
grafo completo formado por los vrtices impares. Para obtener el peso de las
aristas se ha empleado el algoritmo de Dijkstra.

PASO 3
Buscar un emparejamiento perfecto de peso mnimo en el grafo
completo formado por los vrtices impares.

PASO 4
Duplicar las aristas del camino mnimo anteriormente calculado segn el
emparejamiento obtenido, es decir, si se obtuvo la siguiente pareja (v1, v2) se
duplican las aristas del camino mnimo que une v1 con v2 en el grafo original.

Borrego Ropero Rafael


Recio Domnguez Daniel

205 de 248

Manual de algortmica
PASO 5
Encontrar el recorrido cerrado de menor coste. Para ello se ha utilizado
el algoritmo de Fleury.

Seguidamente veremos un ejemplo en el que detallaremos cada uno de


los pasos anteriormente comentados. Sea G el siguiente grafo.

Vrtices Grado
v1
4
v2
4
v3
3
v4
4
v5
3
v6
1
v7
1
PASO 1

Los vrtices impares son v3, v5, v6 y v7.

Borrego Ropero Rafael


Recio Domnguez Daniel

206 de 248

Manual de algortmica
PASO 2

Construimos el grafo completo formado por los vrtices v3, v5, v6 y v7.

Ahora calcularemos las ponderaciones de las


aristas. Para ello
obtendremos la distancia del camino mnimo en G entre cada par de vrtices
del grafo completo formado por los vrtices impares.

dG (v3, v5) = 2.
dG (v3, v6) = 7.
dG (v3, v7) = 2.
dG (v5, v7) = 4.
dG (v6, v5) = 6.
dG (v6, v7) = 9.

Borrego Ropero Rafael


Recio Domnguez Daniel

207 de 248

Manual de algortmica

Por lo que las ponderaciones de las aritas del grafo formado por los
vrtices impares nos queda.

PASO 3

Buscamos un emparejamiento perfecto de peso mnimo en el grafo


formado por los vrtices impares. Para ello se ha utilizado el algoritmo de
emparejamiento de peso ptimo explicado en la seccin dedicada a los
emparejamientos.
El emparejamiento obtenido esta formado por las aristas v3v7 y v5v6.
PASO 4

Ahora debemos duplicar en G las aristas del camino mnimo existente


entre los vrtices emparejados para lo cual volvemos a aplicar Dijkstra.

Borrego Ropero Rafael


Recio Domnguez Daniel

208 de 248

Manual de algortmica
Obtenemos las aristas que forman parte del camino mnimo entre v3 y v7.

Obtenemos las aristas que forman parte del camino mnimo entre v5 y v6.

Borrego Ropero Rafael


Recio Domnguez Daniel

209 de 248

Manual de algortmica

Las aristas coloreadas de azul se duplican en G.


PASO 5

Finalmente encontramos el recorrido cerrado de coste mnimo aplicando


el algoritmo de Fleury teniendo en cuenta las aristas duplicadas, es decir,
podemos pasar por ellas dos veces.
El recorrido es v6-v1-v2-v1-v4-v2-v4-v3-v7-v3-v4-v5-v2-v5-v1-v6.
Orden en el que se recorren las aristas:

Arista (v6, v1, 2).


Arista (v1, v2, 3).
Arista (v2, v1, 3)
Arista (v1, v4, 4).
Arista (v4, v2, 6).
Arista (v2, v4, 6).
Arista (v4, v3, 1).

Borrego Ropero Rafael


Recio Domnguez Daniel

210 de 248

Manual de algortmica

Arista (v3, v7, 2).


Arista (v7, v3, 2).
Arista (v3, v4, 1).
Arista (v4, v5, 1).
Arista (v5, v2, 1).
Arista (v2, v5, 1).
Arista (v5, v1, 5).
Arista (v1, v6, 2).

El peso total del recorrido es 36 unidades.

Borrego Ropero Rafael


Recio Domnguez Daniel

211 de 248

Manual de algortmica

3.10.- Algoritmos de vrtice coloracin


Se denomina vrtice coloracin de un grafo G(V,A) a una asignacin
c: V/N que asocie a cada vrtice vi un color ci /N de tal forma que ha
vrtices adyacentes les correspondan colores distintos.
Dado un grafo G(V,A), siempre existe un valor umbral k para el cual G
admite una vrtice coloracin con una paleta de k colores, pero no una de
(k-1)-coloracin. Es decir k es el menor nmero de colores con los se puede
obtener una vrtice coloracin de G. Este valor se conoce como nmero
cromtico G.
Determinar el nmero cromtico de un grafo es un problema complejo,
no se conoce ningn algoritmo capaz de dar una solucin ptima en tiempo
polinmico, por lo que ser necesario utilizar tcnicas algortmicas capaces de
aproximar una solucin del problema en intervalos de tiempos polinomiales.
Seguidamente expondremos cuatro algoritmos de coloracin de vrtices
de carcter voraz y aplicaremos dichos algoritmos al siguiente grafo que
tomaremos como ejemplo.

Borrego Ropero Rafael


Recio Domnguez Daniel

212 de 248

Manual de algortmica

Algoritmo de coloracin Secuencial o Voraz.

Este algoritmo sigue una estrategia voraz, es decir comienza la


coloracin de los vrtices segn orden de los stos en la matriz de adyacencias
del grafo, por lo que la entrada del algoritmo es una ordenacin de los vrtices
del grafo.
La coloracin se realiza siguiendo los siguientes pasos.
1.- Asignar el color 1 al primer vrtice de la entrada del algoritmo.
2.- A continuacin escogemos el siguiente vrtice en la ordenacin y le
asignamos el menor color posible diferente respecto a sus adyacentes.
Repetimos este proceso hasta que todos los vrtices del grafo hayan sido
coloreados.
En cada paso se le asigna un color a un vrtice y no se le vuelve a
modificar ms a lo largo de la ejecucin de ah el carcter voraz del algoritmo.
Aplicaremos el algoritmo la grafo de la figura.
Orden de coloracin: v1, v2, v3, v4, v5, v6, v7.

vrtices v1 v2 v3 v4 v5 v6 v7
color
1 2 1 3 1 2 2

Borrego Ropero Rafael


Recio Domnguez Daniel

213 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

214 de 248

Manual de algortmica

Algoritmo de coloracin Welsh-Powell

La nica diferencia respecto al algoritmo voraz es el orden en el que se


realiza la coloracin de vrtices.
En este caso los vrtices se ordenan de mayor a menor grado, es decir
en funcin del nmero de vrtices adyacentes.

A continuacin aplicaremos la coloracin de Welsh-Powell al grafo


anterior.

Orden de coloracin: v2, v4, v5, v1, v3, v6, v7.

vrtices v1 v2 v3 v4 v5 v6 v7
color
3 1 2 2 3 1 1

Borrego Ropero Rafael


Recio Domnguez Daniel

215 de 248

Manual de algortmica

Algoritmo de coloracin Matula-Marble-Isaacson

La nica diferencia respecto a los otros dos algoritmos de coloraciones


el orden en el que se realiza la coloracin vrtices.
En este caso el orden de los vrtices es inverso al proceso de seleccin.
Primero se elige vn como el vrtice de menor grado, luego se elige vn-1 como el
vrtice de menor grado en G-{vn} (prescindiendo del vrtice vn), y as se
contina examinando los vrtices de menor grado y eliminndolos del grafo.

A continuacin aplicaremos la coloracin de Welsh-Powell al grafo


anterior.

Orden de coloracin: v5, v4, v2, v1, v7, v3, v6.

vrtices v1 v2 v3 v4 v5 v6 v7
color
1 3 1 2 1 2 2

Borrego Ropero Rafael


Recio Domnguez Daniel

216 de 248

Manual de algortmica

Algoritmo de coloracin de Brelaz

El orden de coloracin de los vrtices depende del grado g(V) y grado de


saturacin o color de los vrtices gs(V) y es determinado en tiempo de
ejecucin. El grado de un vrtice es nmero de adyacentes del mismo y el
grado de saturacin es el nmero colores no repetidos usados en los
adyacentes o vecinos.
A continuacin expondremos los pasos del algoritmo:

PASO 1

Calcular el grado de todos los vrtices y colorear un vrtice de grado


mximo con el color 1.

PASO 2

Seleccionamos un vrtice, an sin colorear, con grado de saturacin o


color mximo. Si existen varios vrtices con el mismo grado de saturacin
mximo escogemos el de mayor grado entre esos vrtices. Si adems
coinciden en grado seleccionamos el primero comenzando por la izquierda de
la tabla.

PASO 3

Colorear el vrtice seleccionado en el paso 2 con el menor color posible.

PASO 4

Si todos los vrtices se han coloreado, FIN. En caso contrario, volver al


paso 3.

Borrego Ropero Rafael


Recio Domnguez Daniel

217 de 248

Manual de algortmica
A continuacin aplicaremos la coloracin de Brelaz al grafo anterior.

vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 0 0 0 0 0 0 0
color
- - - - - - orden
- - - - - - -

La primera fila almacena el grado o el nmero de adyacentes de cada


vrtice y la segunda fila contiene el grado de color o saturacin de cada vrtice
que en principio es cero par todos los vrtices pues an no existe ningn
vrtice coloreado.
La ltima fila informa del color asignado al vrtice.
El primer vrtice coloreado es el vrtice de grado mximo que en nuestro
caso es v2 al cual se le asigna el color 1. Tras colorearlo el grado de saturacin
sus vrtices adyacentes aumenta en una unidad.

v1 v2 v3 v4 v5 v6 v7
vrtices
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 1 0 1 1 1 0 0
color
- 1 - - - - orden
- 1 - - - - -

A continuacin habra que escoger un vrtice de grado de saturacin o


color mximo pero existen varios por lo que seleccionamos el primer vrtice de
grado mximo no colorado comenzando por la izquierda de la tabla. Dicho
vrtice es v4 al cual se le asigna el menor color posible. En este caso el color 2.

vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 0 0
color
- 1 - 2 - - orden
- 1 - 2 - - -

Borrego Ropero Rafael


Recio Domnguez Daniel

218 de 248

Manual de algortmica
En los siguientes pasos volvemos a seleccionar vrtice con grado de
color mximo y si existiera ms de uno escogeramos el de mayor grado, hasta
colorear todos los vrtices del grafo. Veamos la evolucin de la tabla.

vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 0 1
color
- 1 - 2 3 - orden
- 1 - 2 3 - -

vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 0 1
color
3 1 - 2 3 - orden
4 1 - 2 3 - -

v1 v2 v3 v4 v5 v6 v7
vrtices
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 1 1
color
3 1 3 2 3 - orden
4 1 5 2 3 - -

vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 1 1
3 1 3 2 3 1 color
orden
4 1 5 2 3 6 -

vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 1 1
color
3 1 3 2 3 1 1
orden
4 1 5 2 3 6 7

Borrego Ropero Rafael


Recio Domnguez Daniel

219 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

220 de 248

Manual de algortmica

Es bipartito?

Los grafos bipartitos kn,m, que son aquellos que admiten una particin de
sus vrtices en dos conjuntos V = XY, de manera que las aristas tienen un
extremo en cada uno de estos conjuntos (van de vrtices en X a vrtices en Y).
El conjunto X e Y constan de n y m vrtices respectivamente.
| X | = n.
| Y | = m.
Un grafo bipartito si y solo si no contiene ciclos de orden impar o su
nmero cromtico X(G) es dos. Estas dos propiedades nos permiten saber si
un grafo es bipartito.
Teorema
El algoritmo de Brelaz colorea con dos colores a los grafos bipartitos.
Por lo que tenemos un algoritmo polinmico para decidir si un grafo es
bipartito o no.
Bastar aplicar la coloracin de Brelaz al grafo. Si el nmero de colores
usados es igual a dos entonces el grafo es bipartito. En otro caso el grafo no es
bipartito.
Veamos el siguiente ejemplo.

Borrego Ropero Rafael


Recio Domnguez Daniel

221 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

222 de 248

Manual de algortmica
Aplicamos el algoritmo de Brelaz.

Como el nmero de colores utilizados es dos el grafo es bipartito.


Veamos otro ejemplo

Borrego Ropero Rafael


Recio Domnguez Daniel

223 de 248

Manual de algortmica
Aplicamos el algoritmo de Brelaz.

Como el nmero de colores utilizados es distinto de dos el grafo no es


bipartito.

Borrego Ropero Rafael


Recio Domnguez Daniel

224 de 248

Manual de algortmica

3.11.- Algoritmos de aristas coloracin

Expondremos dos algoritmos para la coloracin de las aristas de un


grafo, ambos de carcter voraz.

Algoritmo basado en rellenar un cuadrado latino


Un cuadrado latino es un matriz cuadrada cuya dimensin es n x n,
donde n es el nmero de vrtices del grafo. Cada posicin de la matriz
representa una arista entre dos vrtices.
Para llevar acabo la coloracin rellenaremos la matriz con n smbolos
de tal forma que no existan smbolos repetidos en ninguna fila o columna.
Como curiosidad cabe mencionar que el algoritmo es parecido a la
resolucin de sodokus salvo que en estos existen aristas previamente
coloreadas y nosotros rellenaremos el cuadrado latino sin ninguna restriccin
aadida.
Para rellenar la tabla se comienza de izquierda a derecha y de arriba
abajo asignado un color que no este ya en la fila y columna correspondiente a
la arista tratada.
Seguidamente veremos un ejemplo que aclarar todo lo expuesto
anteriormente.

Borrego Ropero Rafael


Recio Domnguez Daniel

225 de 248

Manual de algortmica

Rellenamos el cuadrado latino.

vrtices
v1
v2
v3
v4
v5
v6
v7
v8
v9

v1
0
1
2

v2
1
0
3

v3
2
3
0

v4

0
2
1

v5
3

1
2
0
4

v6

1
4
0

v7
4

0
1

v8

1
0

v9
5

Lgicamente el cuadrado latino es simtrico pues las aristas vivj o vjvi


son la misma para cualquier tipo de grafo en lo que a coloracin de arista se
refiere, por ello tienen asignado el mismo color.
Si una posicin del cuadrado latino aparece un infinito indica que no
existe arista entre ambos vrtices.

Borrego Ropero Rafael


Recio Domnguez Daniel

226 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

227 de 248

Manual de algortmica

Algoritmo basado en emparejamientos maximales

Este algoritmo colorea las aritas del grafo utilizando el algoritmo de


emparejamiento maximal simple.
Para ello comienza buscando un emparejamiento maximal en el grafo. Al
conjunto de aristas obtenidas les asigna el color k. Seguidamente elimina
dichas aristas del grafo y vuelve a calcular un emparejamiento maximal al cual
le asigna el color k+1. Dicho proceso se repite hasta eliminar todas las aritas
del grafo.
Iniciar k := 1
Paso 1
Encontrar un emparejamiento mximo M de G, y colorear todas las
aristas de M con el color k.
Hacer G := G - M.

Paso 2
Si el grafo no posee aristas, FIN. En caso contrario hacer k := k+1 y
volver al paso 1.
A continuacin detallaremos un ejemplo para el siguiente grafo.

Borrego Ropero Rafael


Recio Domnguez Daniel

228 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

229 de 248

Manual de algortmica
Calculamos un emparejamiento maximal al cual le asignamos el color 1.
Arista (v1, v2).
Arista (v3, v5).
Arista (v4, v6).
Arista (v7, v8).
Eliminamos del grafo las aristas del primer emparejamiento.

Calculamos otro emparejamiento maximal y le asignamos el color 2.


Arista (v1, v7).
Arista (v2, v3).
Arista (v4, v5).

Borrego Ropero Rafael


Recio Domnguez Daniel

230 de 248

Manual de algortmica
Eliminamos del grafo las aristas del segundo emparejamiento.

Calculamos otro emparejamiento maximal y le asignamos el color 3.


Arista (v1, v3).
Arista (v5, v6).

Borrego Ropero Rafael


Recio Domnguez Daniel

231 de 248

Manual de algortmica
Eliminamos del grafo las aristas del tercer emparejamiento.

Calculamos otro emparejamiento maximal y le asignamos el color 4.


Arista (v1, v5).

Borrego Ropero Rafael


Recio Domnguez Daniel

232 de 248

Manual de algortmica
Eliminamos del grafo la arista del cuarto emparejamiento.

Calculamos otro emparejamiento maximal y le asignamos el color 5.


Arista (v5, v8).

Borrego Ropero Rafael


Recio Domnguez Daniel

233 de 248

Manual de algortmica
Eliminamos del grafo la arista del quinto emparejamiento.

Como no quedan aristas por colorear el algoritmo termina.

Borrego Ropero Rafael


Recio Domnguez Daniel

234 de 248

Manual de algortmica

3.-12.- Hamilton
Un grafo conexo se dice hamiltoniano cuando admite un ciclo
hamiltoniano.
Un ciclo hamiltoniano es un ciclo que pasa por todos los vrtices del
grafo.
Un camino hamiltoniano es un camino simple que pasa por todos los
vrtices del grafo sin repetir ninguno.

Algoritmo de Dirac.

El problema de decidir si un grafo es hamiltoniano est abierto (no existe


un procedimiento para saber si lo es).

Teorema de Dirac.

Borrego Ropero Rafael


Recio Domnguez Daniel

235 de 248

Manual de algortmica
Un grafo G (V, A) es hamiltoniano si todos los vrtices tienen valencia
(V) n/2 donde n es el nmero de vrtices del grafo. Esta condicin es
suficiente pero no necesaria por lo que si el grafo no satisface dicha relacin no
podemos asegurar que no sea hamiltoniano.

Borrego Ropero Rafael


Recio Domnguez Daniel

236 de 248

Manual de algortmica
Ejemplo 1.

Vrtices
v1
v2
v3
v4
v5
v6

(V) n/2
5 6/2 = 3
3 6/2 = 3
4 6/2 = 3
4 6/2 = 3
3 6/2 = 3
3 6/2 = 3

El grafo es hamiltoniano pues todos los vrtices tienen valencia mayor o


igual que 3.

Borrego Ropero Rafael


Recio Domnguez Daniel

237 de 248

Manual de algortmica
Ejemplo 2.

Vrtices
v1
v2
v3
v4
v5
v6
v7
v8

(V) n/2
6 8/2 = 4
3 8/2 = 4
4 8/2 = 4
4 8/2 = 4
3 8/2 = 4
4 8/2 = 4
2 8/2 = 4
2 8/2 = 4

Como existen vrtices que no cumplen la relacin, no podemos asegurar


que el grafo no sea hamiltoniano.

Borrego Ropero Rafael


Recio Domnguez Daniel

238 de 248

Manual de algortmica

Bsqueda de trayectorias hamiltonianas.

El problema de bsqueda de trayectorias hamiltonianas es un problema


NP-completo. Aunque existen mtodos aproximados se ha optado por un
algoritmo de bsqueda exhaustiva, implementado mediante la tcnica de
backtracing.
El esquema que implementa el backtracing:
proc btptimo(x: Etapa)
var
xsig: Etapa
cand: Candidatos
prin
si (esSolucin(x))
si (esMejor())
actualizaSolucin()
fsi
fsi
xsig := nuevaEtapa(x)
cand := calculaCandidatos(x)
mientras (quedanCandidatos(cand))
seleccionaCandidato(cand, xsig);
si (esPrometedor(cand, xsig))
anotaSolucin(cand, xsig);
btOptimo(xsig);
cancelaAnotacin(cand, xsig);
fsi
fmientras
fin

A continuacin comentaremos algunas caractersticas del problema que


se pretende resolver y detallaremos cada uno de los mtodos y clases que
hacen posible la bsqueda de la trayectoria hamiltoniana.
Comenzaremos por la Clase Solucin
Clase Solucin
// Atributos
solucin : Array de enteros.
fclase

Borrego Ropero Rafael


Recio Domnguez Daniel

239 de 248

Manual de algortmica
La solucin se almacena en un array de enteros donde que almacena la
posicin del vrtice respecto a la matriz de adyacencias del grafo.
El tamao del array y la profundidad a la que se encuentra la solucin en
caso de existir vienen determinados por el nmero de vrtices del grafo.
Podemos decir que si existe la solucin se encuentra a dicha profundidad en el
rbol de expansin, en otro caso no existe solucin.
Una vez que se encuentra una solucin el se para el proceso de
bsqueda y reconstruiremos la trayectoria a partir de las posiciones del los
vrtices en la matriz de adyacencias.
Adems al no tratarse de un problema de optimizacin el mtodo
esMejor retorna siempre cierto. y actualiza solucin se deja vaco.

Clase Candidatos
Clase Candidatos
// Atributos
vrticesDestinos: Array de enteros
i: entero
fclase

El array almacena las posiciones de los posibles vrtices destinos


respecto a la matriz de adyacencias del grafo del ltimo vrtice que forma parte
de la trayectoria hamiltoniana que no hayan sido ya considerados por lo que
todos los candidatos son prometedores, por ello el mtodo esPrometedor
siempre retornar cierto.
En la primera etapa
Los candidatos se obtienen en el mtodo calculaCandidatos.
El entero i se utiliza para iterar y seleccionar el vrtice candidato,
operacin realizada en el mtodo seleccionaCandidato.

Borrego Ropero Rafael


Recio Domnguez Daniel

240 de 248

Manual de algortmica
Clase Etapa
Clase Etapa
// Atributos
k: entero
fclase

El entero almacena la profundidad del rbol de expansin.


Ahora detallaremos los atributos de la clase que da cuerpo a cada uno
de los mtodos del esquema.

Clase HamiltoBacktracing

Clase HamiltoBacktracing
// Matriz de adyacencias del grafo.
adyacencias: Array [][] de real
hamiltoniano: Array de entero
// Tipo de trayectoria bsqueda (ciclo o camino)
ciclo: Lgico
// Nmero de vrtices del grafo.
numVrtices: entero.
vrticeActual: entero
// Si su valor es cierto se ha encontrado la solucin.
solEncontrada: Lgico
// Almacenar la trayectoria si se encuentra.
sol: Solucin
fclase

El array hamiltoniano almacena la secuencia de posiciones de los


vrtices que forman parte de la trayectoria respecto a la matriz de adyacencias
del grafo y el entero vrticeActual almacena la posicin del ltimo vrtice que
forma parte de la trayectoria.
El tipo de trayectoria buscada es elegida por el usuario.

Borrego Ropero Rafael


Recio Domnguez Daniel

241 de 248

Manual de algortmica

Finalmente comentar que en el mtodo anotaEnSolucin se aade el


vrtice candidato a la trayectoria parcialmente construida y en
cancelaAnotacin solo decrementamos el valor de la etapa.
Para aclara todo lo expuesto anteriormente realizaremos una serie
ejemplo.
Consideremos el siguiente grafo en el cual encontrar el ciclo o camino
hamiltoniano es trivial pero nos servir para mostrar el rbol de expansin
completo. En el rbol en vez de mostraremos los vrtices y no las posiciones
que estos ocupan en la matriz de adyacencias.

En este caso el array que almacena la solucin posee tamao 3 y a


dicha profundidad obtendremos la solucin, pero seguiremos expandiendo el
rbol para ver como evoluciona aunque no es necesario y de hecho no se
realiza en la implementacin proporcionada para la aplicacin pues seria una
perdida de tiempo.
Al lado de cada tupla entre llaves aparecen lo candidatos.

Etapa

[-, -, -] {v1, v2, v3}

k= 0

[v1, -, -] {v2, v3}

[v2, -, -] {v1, v3}

[v3, -, -] {v1, v2}

k=1
[v1, v2, -]

[v1, v3, -]

Borrego Ropero Rafael


Recio Domnguez Daniel

[v2, v1, -]

[v2, v3, -]

[v3, v1, -]

[v3, v2, -]

242 de 248

Manual de algortmica
k=2

{v3}

[v1, v2, v3]

{v2}

{v3}

[v1, v3, v2] [v2, v1, v3]

Borrego Ropero Rafael


Recio Domnguez Daniel

{v1}
[v2, v3, v1]

{v2}
[v3, v1, v2]

{v1}
[v3, v2, v1]

243 de 248

Manual de algortmica
La solucin encontrada es v1-v2-v3 si se desea el camino o v1-v2-v3 -v1 en
el caso del ciclo, el resto del rbol no seria necesario generarlo.
En cada tupla se actualiza la posicin correspondiente con la etapa en la
que nos encontramos considerando que las posiciones del array comienzan en
cero.
A continuacin expondremos otro ejemplo con su rbol de expansin
para un grafo en el que existe un camino hamiltoniano. Una vez encontrado el
camino no seguiremos expandiendo el rbol.

Etapa
[-, -, -, -] {v1, v2, v3, v4}
k=0

[v1, -, -, -,]

{v2, v3, v4}

[v2, -, -, -] {v1}

k=1

[v1, v2, -, -] {}

[v1, v3, -, -] {v4}

[v1, v4, -, -] {v3}

[v2, v1, -, -] {v3, v4}

[v1, v3, v4, -] {}

[v1, v4, v3, -] {}

[v2, v1, v3, -] {v4}

k=2

k=3
[v2, v1, v3, v4]

Borrego Ropero Rafael


Recio Domnguez Daniel

244 de 248

Manual de algortmica
El camino hamiltoniano es v2-v1-v3-v4.

Borrego Ropero Rafael


Recio Domnguez Daniel

245 de 248

Manual de algortmica
Finalmente podremos un ejemplo de bsqueda de un ciclo hamiltoniano en
el que solo mostraremos la solucin.

El ciclo hamiltoniano es v3-v5-v1.v2.v4-v6-v3.

Borrego Ropero Rafael


Recio Domnguez Daniel

246 de 248

Manual de algortmica

Borrego Ropero Rafael


Recio Domnguez Daniel

247 de 248

Manual de algortmica

4.- Bibliografa
Apuntes de la asignatura de matemtica discreta de la escuela tcnica
superior de informtica de la universidad de Sevilla
http://ma1.eii.us.es/miembros/mcruz/MD/md_ii.html.
Apuntes de la asignatura de teora de grafos de la escuela tcnica
superior de informtica de la universidad de Sevilla
http://ma1.eii.us.es/Docencia/Doc_info/XSLT.asp?xml=teorgraf.xml&xsl=progra
ma.xsl&par=esp:.
Coloracin de vrtices y aristas
http://www.dma.fi.upm.es/grafos/color03.pdf.
Apuntes sobre grafos eulerianos
http://www.google.es/search?hl=es&q=grafos+German+Combariza&btnG=B%
C3%BAsqueda&meta=.
Conectividad en grafos http://mipagina.cantv.net/jhnieto/md/Grafos.pdf.

Borrego Ropero Rafael


Recio Domnguez Daniel

248 de 248

También podría gustarte