Anda di halaman 1dari 210

Documentacin de la aplicacin Algraf Project

Borrego Ropero Rafael 1 de 210


Recio Domnguez Daniel



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

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 2 de 210
Recio Domnguez Daniel
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 3 de 210
Recio Domnguez Daniel
TABLA DE CONTENIDOS


1.- Introduccin................................................................................................... 5
2.- Conceptos generales. ................................................................................... 7
Grafos, tipos, ejemplos................................................................................ 7
Algunas definiciones. ................................................................................ 11
Algunos grafos bsicos. ............................................................................ 15
Tipos de rutas ........................................................................................... 41
Grafo complementario............................................................................... 43
Grafo de lnea. .......................................................................................... 45
3.- Algoritmos implementados. ......................................................................... 47
3.1.- Algoritmos sobre caminos mnimos. ..................................................... 47
Algoritmo de Dijkstra. ................................................................................ 47
Algoritmo de Floyd. ................................................................................... 53
3.2.- Algoritmos de distancias....................................................................... 57
Excentricidad de un vrtice. ...................................................................... 57
Radio de un grafo...................................................................................... 58
Dimetro de un grafo................................................................................. 60
Distancia de un vrtice. ............................................................................. 61
Algoritmo de la mediana............................................................................ 63
Algoritmo del centro. ................................................................................. 64
Algoritmo de componentes conexas. ........................................................ 66
Vrtices de corte. ...................................................................................... 68
Aristas puente. .......................................................................................... 69
Bloques. .................................................................................................... 70
3.3.- Algoritmos de bsquedas. .................................................................... 77
Bsqueda en profundidad (DFS) .............................................................. 77
Bsqueda en anchura (BFS) .................................................................... 79
3.4.- rboles recubridores de peso mnimo. ................................................. 81
Algoritmo de Boruvka. ............................................................................... 81
Algoritmo de Prim...................................................................................... 86
Algoritmo de Kruskal. ................................................................................ 88
3.5.- Prfer.................................................................................................... 91
Algoritmo de codificacin. ......................................................................... 91
Algoritmo de decodificacin. ..................................................................... 98
3.6.- Algoritmo de emparejamientos........................................................... 106
Algoritmo de emparejamiento maximal simple........................................ 106
Algoritmo de Kuhn-Munkres.................................................................... 110
Algoritmo de Kuhn-Munkres con preprocesamiento (peso mnimo)........ 121
Algoritmo de emparejamiento maximal de peso ptimo.......................... 125
3.7.- Euler ................................................................................................... 135
Es euleriano ?. ..................................................................................... 135
3.8.- Algoritmos de bsqueda de trayectorias eulerianas. .......................... 139
Algoritmo de Fleury ................................................................................. 139
Algoritmo de Tucker. ............................................................................... 156
Algoritmo de Hierholzer........................................................................... 171
Problema del cartero............................................................................... 174
Algoritmo de coloracin Secuencial o Voraz. .......................................... 181
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 4 de 210
Recio Domnguez Daniel
Algoritmo de coloracin Welsh-Powell .................................................... 182
Algoritmo de coloracin Matula-Marble-Isaacson ................................... 183
Algoritmo de coloracin de Brelaz........................................................... 184
3.9.- Algoritmos de aristas coloracin......................................................... 191
Algoritmo basado en emparejamientos maximales................................. 194
3.10.- Hamilton ........................................................................................... 201
Algoritmo de Dirac................................................................................... 201
Bsqueda de trayectorias hamiltonianas................................................. 204
4.- Bibliografa ................................................................................................ 210

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 5 de 210
Recio Domnguez Daniel
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.

Se ha mejorado la interfaz de usuario y la manejabilidad de la aplicacin
permitiendo al usuario modificar la visualizacin de los grafos con las
operaciones de zoom y centrado, as como configurar el tamao y color de
vrtices y aristas.

Adems la aplicacin permite generar documentacin. Por una parte
podemos guardar los grafos como imgenes en distintos formatos *.bmp, *.jpg,
*.gif y *.png. Tambin podemos generar documentacin en formato pdf donde
nos aparecer el grafo y el conjunto de vrtices y aristas que lo forman.

Por otra parte, como la aplicacin se ha realizado con fines didcticos se
han puestos ciertos contenidos tericos en presentacin de los resultados de la
mayora de los algoritmos para facilitar al usuario la comprensin del problema
que va resolver. Adems se incluye un manual exclusivamente de algortmica
sobre todos los problemas que resuelve la aplicacin con gran variedad de
ejemplos.

La aplicacin resuelve todos los problemas recogidos en versiones
anteriores de Algraf y se han incluido nuevos algoritmos dando solucin a
gran cantidad de problemas entre los que podemos destacar:

- Problema de rutas o trayectorias.

- Problemas de ubicacin.

- Problemas de compatibilidades o coloracin.

- Problemas de minimizacin de costes.

- Problemas de emparejamientos.





Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 6 de 210
Recio Domnguez Daniel
Los conceptos expuestos en la parte de algortmica estn enfocados a la
comprensin nica y exclusivamente de 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.

Para la realizacin de la documentacin se ha seguido dos pautas
claramente diferenciadas. Tanto en la parte correspondiente al manual de
usuario como la de algortmica se ha hecho uso de la propia aplicacin. Para
explicar el manual de usuario se realizado capturas de pantallas y en la parte
de algortmica se han utilizado imgenes generadas por la propia aplicacin.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 7 de 210
Recio Domnguez Daniel
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.










v
1
v
2
v
3
v
4
v
5
v
6
v
7
v
1 1 1
v
2
1 1 1 1
v
3 1 1
v
4
1 1 1
v
5 1 1 1
v
6 1
v
7 1
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 8 de 210
Recio Domnguez Daniel
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.



v
1
v
2
v
3
v
4
v
5
v
1 1 1
v
2
1 1
v
3 1
v
4
1 1
v
5 1
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 9 de 210
Recio Domnguez Daniel
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.



v
1
v
2
v
3
v
4
v
5
v
6
v
7
v
1 3 5 2
v
2
3 3 6 1
v
3 3 1 2
v
4 6 1 1
v
5
5 1 1
v
6
2
v
7 2
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 10 de 210
Recio Domnguez Daniel
Ejemplo de grafo ponderado dirigido.



Matriz de adyacencias.
















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.



v
1
v
2
v
3
v
4
v
5
v
6
v
7
v
8
v
1 2 3
v
2 1 1
v
3 1
v
4 1
v
5 1
v
6 4
v
7 2
v
8
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 11 de 210
Recio Domnguez Daniel
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.





Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 12 de 210
Recio Domnguez Daniel
Subgrafo H.





No es un subgrafo.





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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 13 de 210
Recio Domnguez Daniel
Un subgrafo H es subgrafo inducido por vrtices si existe S
V (G) tal que H = <S>.

Ejemplo




Subgrafo inducido por lo vrtices {v
1
, v
4
, v
5
, v
6
}.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 14 de 210
Recio Domnguez Daniel
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).


Ejemplo




Subgrafo inducido por las aristas {v
1
v
4
, v
4
v
5
, v
5
v
6
, v
6
v
3
, v
4
v
3
}.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 15 de 210
Recio Domnguez Daniel

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 (k
p
).

Ejemplo k
4
.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 16 de 210
Recio Domnguez Daniel
Ejemplo k
5
.


Caminos simples.


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

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

Ejemplo

Ciclos.


Los ciclos C
n
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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 17 de 210
Recio Domnguez Daniel
Ejemplo C
5
.

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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 18 de 210
Recio Domnguez Daniel
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.



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.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 19 de 210
Recio Domnguez Daniel

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.




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 diez vrtices puede observarse en la figura.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 20 de 210
Recio Domnguez Daniel

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 K
1
+C
n
, de un vrtice aislado con un ciclo de longitud n.

Grafo rueda w
12

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 21 de 210
Recio Domnguez Daniel
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, Q
k
, 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 2
1
vrtices y (1/2)2
1
= 1 arista.



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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 22 de 210
Recio Domnguez Daniel
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.










Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 23 de 210
Recio Domnguez Daniel
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 2
4
vrtices y 2
5
aristas,
lo que le da un grado 4 a todos sus vrtices, como ya sabamos.




Cubo de dimensin 5.


Para terminar con los grafos relativos a la familia de los cubos n-
dimensionales 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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 24 de 210
Recio Domnguez Daniel


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
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 25 de 210
Recio Domnguez Daniel
ancho y un nmero j de alto, el nmero de aristas del grafo vendr
determinado por la frmula (j-1)i + (i-1)j.


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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 26 de 210
Recio Domnguez Daniel
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).


Grafo rejilla triangular de 11 vrtices de lado.




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.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 27 de 210
Recio Domnguez Daniel
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 v
n
el nmero de vrtices de G de grado n y sea f
n
el nmero de
caras de G de grado n.

<< vrtices
G
+ caras
G
= aristas
G
+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.


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.




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 28 de 210
Recio Domnguez Daniel


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.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 29 de 210
Recio Domnguez Daniel


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.




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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 30 de 210
Recio Domnguez Daniel



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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 31 de 210
Recio Domnguez Daniel

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 no-
hamiltoniano.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 32 de 210
Recio Domnguez Daniel
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: H
k, 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 H
11, 10
.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 33 de 210
Recio Domnguez Daniel

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 k
1
, k
2
, ... , k
n
, obtendramos un grafo que podramos
denominar n-enlazado. Los grafos enlazados ms comunes son aquellos para
los que n=1, que denotamos por L
n,r
y aquellos en los que n=2, que denotamos
por L
n,r,s
.




Enlazados L
N, R



Dado un grafo G, definido por un conjunto de vrtices V y un conjunto de
aristas A. Supongamos v
1
, ..., v
n
los vrtices contenidos en V. Se dice que G
es un grafo enlazado L
n, r
si cumple que:

v
i
, v
j
V, tales que (j<r j+n=i+r) (j=r j=i+r), la arista (v
i
, v
j
) A

Los grafos enlazados L
n, 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. L
10,4
.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 34 de 210
Recio Domnguez Daniel
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 35 de 210
Recio Domnguez Daniel
Enlazados L
N, 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 L
n, 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 L
n, 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 L
10, 4, 2
.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 36 de 210
Recio Domnguez Daniel
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.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 37 de 210
Recio Domnguez Daniel
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. La siguiente
figura muestra una representacin del grafo de 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).

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 38 de 210
Recio Domnguez Daniel
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 M
k
que no tiene
subgrafos tringulos (K
3
).

De esta familia de grafos M
i
denominada familia Mycielski, el de
Grtzsch representa el grafo M
4
.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 39 de 210
Recio Domnguez Daniel
Grafo de Heawood

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


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 40 de 210
Recio Domnguez Daniel
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.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 41 de 210
Recio Domnguez Daniel
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: v
0
e
1
v
1
e
2
v
2
v
n-1
e
n
v
n
comenzando y terminando
con vrtices tal que e
i
= v
i-1
v
i
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: v
1
v
3
v
5
v
2
v
4
v
3
v
1
v
2
.

Camino 2: v
4
v
2
v
5
v
3
v
1.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 42 de 210
Recio Domnguez Daniel
Un recorrido o trayectoria es un camino donde no se repiten aristas. Un
posible ejemplo basndonos en el grafo anterior.

Recorrido 1: v
4
v
2
v
5
v
3
v
1.

Recorrido 2: v
5
v
3
v
1
v
2
.


Un camino simple es un camino en el que no se repiten vrtices.

Camino simple: v
4
v
2
v
5
v
3
v
1.


Un ciclo es un camino simple v
0
v
1
v
n
con n 3, v
0
= v
n
y los n vrtices
son distintos. Al ciclo de longitud n lo denominaremos n-ciclo.

Ciclo: v
1
v
3
v
5
v
2
v
1


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: v
1
v
2
v
5
v
3
v
2
v
4
v
3
v
1
.



Vrtices repetidos Aristas repetidas Abierto Cerrado Tipo ruta
SI SI Camino
SI SI SI Camino cerrado
SI NO Recorrido
SI NO SI Circuito
NO NO SI Camino simple
NO NO SI Ciclo
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 43 de 210
Recio Domnguez Daniel
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.






Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 44 de 210
Recio Domnguez Daniel
Ejemplo 2. (Grafo dirigido).



Grafo complementario.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 45 de 210
Recio Domnguez Daniel
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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 46 de 210
Recio Domnguez Daniel
Ejemplo 2.


Grafo de lnea.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 47 de 210
Recio Domnguez Daniel
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 V
i
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 V
i
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 V
i


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 V
i
, 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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 48 de 210
Recio Domnguez Daniel
En cada iteracin se rellena una fila, siguiendo los siguientes pasos:

1.- Buscamos los vrtices adyacentes al vrtice V
i
y en la columna
correspondiente al adyacente.

Si la distancia total recorrida hasta el momento ms la distancia entre
V
i
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 V
i
, 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 del algoritmo quede totalmente clara
expondremos algunos ejemplos.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 49 de 210
Recio Domnguez Daniel
Ejemplo 1
Aplicamos el algoritmo de Dijkstra para encontrar el camino mnimo
entre el vrtice v
1
y v
8
obteniendo la siguiente tabla.


V
1
(v
2
,P(v
2
)) (v
3
,P(v
3
)) (v
4
,P(v
4
)) (v
5
,P(v
5
)) (V
6
,P(v
6
)) (v
7
,P(v
7
)) (v
8
,P(v
8
)) m V
i

(0,NP) (,NP) (,NP) (,NP) (,NP) (,NP) (,NP) (,NP) 0 V
1

* (2,v
1
) (3,v
1
) (,NP) (,NP) (,NP) (,NP) (,NP) 2 V
2
* * (3,v
1
) (3,v
2
) (3,v
2
) (,NP) (,NP) (,NP) 3 V
3
* * * (3,v
2
) (3,v
2
) (,NP) (6,v
3
) (,NP) 3 V
4
* * * * (3,v
2
) (4,v
4
) (6,v
3
) (,NP) 3 V
5
* * * * * (4,v
5
) (6,v
3
) (,NP) 4 V
6
* * * * * * (6,v
3
) (8,v
6
) 6 V
7
* * * * * * * (8,v
7
) 8 V
8

A continuacin reconstruiremos el camino desde el vrtice v
1
a vrtice v
8
comenzando por este ltimo.


Para ir desde el vrtice v
8
al vrtice v
1
es necesario pasar por el padre
de v
8
. El camino construido hasta el momento es v
8
v
7
... v
1
.

Seguidamente miraramos quien es el padre del ltimo vrtice que forma
parte del camino parcialmente construido, en este caso es v
3
y as
sucesivamente.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 50 de 210
Recio Domnguez Daniel

El camino completo es:

v
8
{P(v
8
)} v
7
{P(v
7
)}

v
3
{P(v
3
)}

v
1
{P(v
1
)}.

Camino mnimo: v
1
v
3
v
7
v
8
. 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:

v
8
{P(v
8
)} v
6
{P(v
6
)}

v
5
{P(v
5
)}

v
2
{P(v
2
)} v
1
{P(v
1
)}.

Camino mnimo: v
1
v
2
v
5
v
6
v
8
. La longitud del camino es 8.

Podemos observar que en la columna correspondiente al vrtice V
6
existen dos tuplas con padres distintos y misma distancia por lo que existe otro
camino mnimo ms.


Reconstruccin del tercer camino:

v
8
{P(v
8
)} v
6
{P(v
6
)}

v
4
{P(v
4
)}

v
2
{P(v
2
)} v
1
{P(v
1
)}.

Camino mnimo: v
1
v
2
v
4
v
6
v
8
. La longitud del camino es 8.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 51 de 210
Recio Domnguez Daniel
Ejemplo 2


Aplicamos el algoritmo de Dijkstra para encontrar el camino mnimo
entre el vrtice v
1
y v
4
obteniendo la siguiente tabla.


V
1
(v
2
,P(v
2
)) (v
3
,P(v
3
)) (v
4
,P(v
4
)) (v
5
,P(v
5
)) m V
i

(0,NP) (,NP) (,NP) (,NP) (,NP) 0 V
1

* (5,v1) (4,v1) (,NP) (,NP) 4 V
3
* (5,v1) * (12,v3) (6,v3) 5 V
2
* * * (7,v2) (6,v3) 6 V
5
* * * (7,v5) * 7 V
4


Recontraccin del primer camino mnimo desde el vrtice v
1
a v
4
.

V
4
{P(v
4
)} v
5
{P(v
5
)}

v
3
{P(v
3
)}

v
1
{P(v
1
)}.

Camino mnimo: v
1
v
3
v
5
v
4
. La longitud del camino es 7.


Recontraccin del segundo camino mnimo desde el vrtice v
1
a v
4
.

V
4
{P(v
4
)} v
2
{P(v
2
)}

v
1
{P(v
1
)}.

Camino mnimo: v
1
v
2
v
4
. La longitud del camino es 7.




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 52 de 210
Recio Domnguez Daniel
Ejemplo3


Aplicamos el algoritmo de Dijkstra para encontrar el camino
mnimo entre el vrtice v
1
y v
4
obteniendo la siguiente tabla.

V
1
(v
2
,P(v
2
)) (v
3
,P(v
3
)) (v
4
,P(v
4
)) (v
5
,P(v
5
)) m V
i

(0,NP) (,NP) (,NP) (,NP) (,NP) 0 V
1

* (1,v1) (,NP) (,NP) (,NP) 1 V
2
* * (4,v2) (,NP) (,NP) 4 V
3
* * * (,NP) (,NP)

* * * * *



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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 53 de 210
Recio Domnguez Daniel
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 D
k
[i,j] que debe cumplir:




Donde D
k
[i, j] = mnimo(D
k-1
[i,k] + D
k-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
D
k
-1[i, k]+ D
k-1
[k, j] (pasando por k).

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

D
k
[i, j] =
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 54 de 210
Recio Domnguez Daniel
fin


A continuacin veremos un ejemplo con ms detalle:

Ejemplo1



Calcularemos la sucesin de matrices D
k
. Sea M[i,j] la matriz de
adyacencias del grafo.




M [j, j] =




Primera iteracin

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



D
1
= P[i,j] =


V
1
V
2
V
3
V
4

V
1
0 5
V
2
50 0 15 5
V
3
30 0 15
V
4
15 5 0
V
1
V
2
V
3
V
4

V
1
0 5
V
2
50 0 15 5
V
3
30 35 0 15
V
4
15 20 5 0
V
1
V
2
V
3
V
4

V
1
0 0 0 0
V
2
0 0 0 0
V
3
0 1 0 0
V
4
0 1 0 0
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 55 de 210
Recio Domnguez Daniel



D
2
representa el camino ms corto para ir desde vrtice i al vrtice j
pudiendo pasar nicamente por el vrtice 1 y 2.




D
2
= P[i,j] =





D
3
representa el camino ms corto para ir desde vrtice i al vrtice j
pudiendo pasar nicamente por el vrtice 1, 2 y 3.





D
3
= P[i,j] =




D
4
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.





D
4
= P[i,j] =





Cmo se reconstruye el camino?.

Para ir desde un vrtice v
i
a un vrtice v
j
consultamos la posicin P[i,j] de
la matriz de trayectorias:

Si es 0 puede darse dos situaciones, que exista camino directo para ir
desde el vrtice i al j o que no exista camino entre ambos vrtices.

V
1
V
2
V
3
V
4

V
1
0 5 20 10
V
2
50 0 15 5
V
3
30 35 0 15
V
4
15 20 5 0
V
1
V
2
V
3
V
4

V
1
0 0 2 2
V
2
0 0 0 0
V
3
0 1 0 0
V
4
0 1 0 0
V
1
V
2
V
3
V
4

V
1
0 5 20 10
V
2
45 0 15 5
V
3
30 35 0 15
V
4
15 20 5 0
V
1
V
2
V
3
V
4

V
1
0 0 2 2
V
2
3 0 0 0
V
3
0 1 0 0
V
4
0 1 0 0
V
1
V
2
V
3
V
4

V
1
0 5 15 10
V
2
20 0 10 5
V
3
30 35 0 15
V
4
15 20 5 0
V
1
V
2
V
3
V
4

V
1
0 0 4 2
V
2
4 0 4 0
V
3
0 1 0 0
V
4
0 1 0 0
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 56 de 210
Recio Domnguez Daniel
Si existe camino la posicin P[i ,j] nos dice el vrtice k por el que hay
que pasar del para ir del vrtice i al vrtice j.

Seguidamente habr que reconstruir el camino para ir desde el vrtice i
al vrtice k y del vrtice k al vrtice j, para lo cual visitamos las posiciones
P[i, k] y P[k, j] respectivamente.

Este proceso se repite hasta completar el camino.


Reconstruccin del camino mnimo para ir desde el vrtice v
2
al vrtice v
3.

P[2,3] = 4 por lo que para ir de v
2
a v
3
es necesario pasar por el vrtice 4.

P[4,3] = 0 existe camino directo.


Camino mnimo: v
2
v
4
v
3
.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 57 de 210
Recio Domnguez Daniel
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 v
1
.



Distancia mnima Valor camino mnimo
dist
min
(v
1
, v
2
) 5
dist
min
(v
1
, v
3
) 4
dist
min
(v
1
, v
4
) 7
dist
min
(v
1
, v
5
) 6

La excentricidad es 7.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 58 de 210
Recio Domnguez Daniel

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 Valor camino mnimo
dist
min
(v
1
, v
2
) 5
dist
min
(v
1
, v
3
) 4
dist
min
(v
1
, v
4
) 7
dist
min
(v
1
, v
5
) 6
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 59 de 210
Recio Domnguez Daniel


Distancia mnima Valor camino mnimo
dist
min
(v
2
, v
1
) 5
dist
min
(v
2
, v
3
) 5
dist
min
(v
2
, v
4
) 2
dist
min
(v
2
, v
5
) 3


Distancia mnima Valor camino mnimo
dist
min
(v
3
, v
1
) 4
dist
min
(v
3
, v
2
) 5
dist
min
(v
3
, v
4
) 3
dist
min
(v
3
, v
5
) 2

Distancia mnima Valor camino mnimo
dist
min
(v
4
, v
1
) 7
dist
min
(v
4
, v
2
) 2
dist
min
(v
4
, v
3
) 3
dist
min
(v
4
, v
5
) 1

Distancia mnima Valor camino mnimo
dist
min
(v
5
, v
1
) 6
dist
min
(v
5
, v
2
) 3
dist
min
(v
5
, v
3
) 2
dist
min
(v
5
, v
4
) 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.







Para obtener el radio basta con obtener el mnimo del array.
v
1
v
2
v
3
v
4
v
5
7 5 5 7 6
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 60 de 210
Recio Domnguez Daniel
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.




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 61 de 210
Recio Domnguez Daniel
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 v
1
y v
5
.





Distancia mnima Valor camino mnimo
dist
min
(v
1
, v
2
) 5
dist
min
(v
1
, v
3
) 4
dist
min
(v
1
, v
4
) 7
dist
min
(v
1
, v
5
) 6
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 62 de 210
Recio Domnguez Daniel
distancia 22
Distancia mnima Valor camino mnimo
dist
min
(v
5
, v
1
) 6
dist
min
(v
5
, v
2
) 3
dist
min
(v
5
, v
3
) 2
dist
min
(v
5
, v
4
) 1
distancia 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.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 63 de 210
Recio Domnguez Daniel
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(V
1
) 22
distancia(v
2
) 15
distancia(v
3
) 14
distancia(v
4
) 13
distancia(v
5
) 12



En este caso la mediana del grafo esta formada por un nico vrtice.
Dicho vrtice es v
5
.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 64 de 210
Recio Domnguez Daniel
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.




El subconjunto de vrtices de mnima excentricidad esta formado por los
vrtices v
2
y v
3
.
v
1
v
2
v
3
v
4
v
5
7 5 5 7 6
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 65 de 210
Recio Domnguez Daniel




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 66 de 210
Recio Domnguez Daniel
5.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










Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 67 de 210
Recio Domnguez Daniel

v
1
v
2
v
3
v
4
v
5
v
6
Mayor Menor
1 2 3 4 5 6 * *


En principio todos los vrtices estn desconectados.


v
1
v
2
v
3
v
4
v
5
v
6
Mayor Menor
1 2 3 1 5 6 4 1

El vrtice v
1
y v
4
estn conectados.
Actualizada la posicin del vrtice v
4
.



v
1
v
2
v
3
v
4
v
5
v
6
Mayor Menor
1 2 3 1 2 6 5 2


El vrtice v
2
y v
5
estn conectados.
Actualizada la posicin del vrtice v
5
.


v
1
v
2
v
3
v
4
v
5
v
6
Mayor Menor
1 2 3 1 2 3 6 3


El vrtice v
3
y v
6
estn conectados.
Actualizada la posicin del vrtice v
6
.


Como puede apreciarse el grafo posee tres componentes conexas que
son v
1
v
4
, v
2
v
5
y v
3
v
6
.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 68 de 210
Recio Domnguez Daniel
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: v
3
, v
4
, v
7
. Basta observar que si
eliminamos algunos de estos vrtices el grafo no es conexo.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 69 de 210
Recio Domnguez Daniel
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 v
4
v
5
, v
6
v
5
y v
3
v
7
.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 70 de 210
Recio Domnguez Daniel
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 G
1
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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 71 de 210
Recio Domnguez Daniel
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 {v
5
}.

Aristas puente {v
4
v
5
, v
5
v
6
}.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 72 de 210
Recio Domnguez Daniel
PASO 2.


Eliminamos el vrtice de corte y guardamos las aristas eliminadas
{v
5
v
6
, v
5
v
4
, v
1
v
5
, v
3
v
5
}.




PASO 3.

Componentes conexas {{v
1
v
2
, v
1
v
3
, v
3
v
2
}, {v
4
}, {v
6
}}.


PASO 4.


Restauramos el nico vrtice de corte v
5
junto con las aristas
eliminadas {v
5
v
6
, v
5
v
4
, v
1
v
5
, v
3
v
5
} y eliminamos las aristas puente.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 73 de 210
Recio Domnguez Daniel
PASO 5.


Comprobamos si en el grafo existe alguna arista formada por v
5
y
algn vrtice de las aristas de la componente conexa. Este proceso se
realiza para cada una de las componentes conexas.

Componentes conexas {{v
1
v
2
, v
1
v
3
, v
3
v
2
}, {v
4
}, {v
6
}}.



Primera componente conexa {v
1
v
2
, v
1
v
3
, v
3
v
2
}.

Conjunto de aristas encontradas {v
5
v
1
, v
5
v
3
}.

Aadimos las aristas encontradas a la lista de aristas de la
primera componente conexa obteniendo las aristas del primer bloque.

Bloque 1 {v
1
v
2
, v
1
v
3
, v
3
v
2
, v
5
v
1
, v
5
v
3
}.


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 {v
4
v
5
}.

Bloque 3 {v
5
v
6
}.



Bloques del grafo:


Bloque 1 {v
1
v
2
, v
1
v
3
, v
3
v
2
, v
5
v
1
, v
5
v
3
}.

Bloque 2 {v
4
v
5
}.

Bloque 3 {v
5
v
6
}.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 74 de 210
Recio Domnguez Daniel
Ejemplo para un grafo dirigido.





PASO 1.


Vrtices de corte {v
2
, v
3
}.

Aristas puente {v
2
v
3
}.



PASO 2.


Eliminamos el vrtice de corte y guardamos las aristas eliminadas
{v
2
v
3
, v
2
v
5
, v
1
v
2
, v
4
v
2
, v
3
v
6
, v
3
v
7
}.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 75 de 210
Recio Domnguez Daniel

PASO 3.


Componentes conexas {{v
1
v
5
, v
5
v
4
}, {v
6
v
7
}}.


PASO 4.


Restauramos los vrtices de corte junto con las aristas eliminadas
{v
2
v
3
, v
2
v
5
, v
1
v
2
, v
4
v
2
, v
3
v
6
, v
3
v
7
} y eliminamos las aristas puente.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 76 de 210
Recio Domnguez Daniel
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 {{v
1
v
5
, v
5
v
4
}, {v
6
v
7
}}.

Primera componente conexa {v
1
v
5
, v
5
v
4
}.

Conjunto de aristas encontradas {v
2
v
5
, v
1
v
2
, v
4
v
2
}

Con el vrtice v
3
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 {v
1
v
5
, v
5
v
4
, v
2
v
5
, v
1
v
2
, v
4
v
2
}.


Segunda componente conexa {v
6
v
7
}.

Conjunto de aristas encontradas {v
3
v
6
, v
3
v
7
}.

Con el vrtice v
2
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 {v
6
v
7
, v
3
v
6
, v
3
v
7
}.


PASO 6

Finalmente aadimos las aristas puente como bloque del grafo.

Bloque 3 {v
2
v
3
}.


Bloques del grafo:


Bloque 1 {v
1
v
5
, v
5
v
4
, v
2
v
5
, v
1
v
2
, v
4
v
2
}.

Bloque 2 {v
6
v
7
, v
3
v
6
, v
3
v
7
}.

Bloque 3 {v
2
v
3
}.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 77 de 210
Recio Domnguez Daniel
3.3.- 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



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 78 de 210
Recio Domnguez Daniel
Aplicaremos el algoritmo de bsqueda en profundidad comenzando por
el vrtice v
1


Pila Vrtices Aristas Visitados
v
1
v
2
v
1
v
2
v
1
v
2

v
1
v
2
v
3
v
2
v
3
v
1
v
2
v
3

v
1
v
2
v
3
v
5
v
3
v
5
v
1
v
2
v
3
v
5

v
1
v
2
v
3
v
5
* * v
1
v
2
v
3
v
5

v
1
v
2
v
3
v
6
v
3
v
6
v
1
v
2
v
3
v
5
v
6

v
1
v
2
v
3
v
6
v
4
v
6
v
4
v
1
v
2
v
3
v
5
v
6
v
4

v
1
v
2
v
3
v
6
v
4
* *
v
1
v
2
v
3
v
6
* *
v
1
v
2
v
3
* *
v
1
v
2
* *
v
1
* *
Pila vaca * *



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: v
1
, v
2
, v
3,
v
5,
v
6
y v
4
.

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:






Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 79 de 210
Recio Domnguez Daniel
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




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 80 de 210
Recio Domnguez Daniel
Aplicaremos el algoritmo de bsqueda en anchura comenzando por el
vrtice v
1.


Cola Vrtices Aristas Visitados
v
1
v
2
v
1
v
2
v
1
v
2

v
2
v
1
v
4
v
1
v
4
v
1
v
2
v
4

v
4
v
2
v
1
v
6
v
1
v
6
v
1
v
2
v
4
v
6

v
4
v
2
* * v
1
v
2
v
4
v
6

v
4
v
2
v
3
v
2
v
3
v
1
v
2
v
4
v
6
v
3

v
3
v
4
v
2
* * v
1
v
2
v
4
v
6
v
3

v
3
v
4
* * v
1
v
2
v
4
v
6
v
3

v
3
v
5
v
3
v
5
v
1
v
2
v
4
v
6
v
3
v
5

v
5
v
3
* *
v
5
* *
Cola vaca * *



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: v
1
, v
2
, v
4,
v
6,
v
3
y v
5
.

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:








Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 81 de 210
Recio Domnguez Daniel
3.4.- 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.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 82 de 210
Recio Domnguez Daniel

Paso 1


Elegimos de cada vrtice la arista de menor para formar un conjunto de
componentes de vrtices.





Paso 2


Buscamos las aristas de menor peso entre vrtices de componentes
distintas.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 83 de 210
Recio Domnguez Daniel


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


Veamos otro ejemplo.



Paso 1


Elegimos de cada vrtice la arista de menor para formar un conjunto de
componentes de vrtices.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 84 de 210
Recio Domnguez Daniel



Paso 2


Buscamos las aristas de menor peso entre vrtices de componentes
distintas.






Repetimos dicho proceso hasta que el grafo sea conexo.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 85 de 210
Recio Domnguez Daniel











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


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 86 de 210
Recio Domnguez Daniel
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.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 87 de 210
Recio Domnguez Daniel
Como vrtice de partida tomaremos el vrtice v
1
.



T
0
= { v
1
}.

T
1
= T
0
+ {v
1
, v
6
}.

T
2
= T
1
+ {v
1
, v
4
}.

T
3
= T
2
+ {v
4
, v
7
}.

T
4
= T
3
+ { v
4
, v
5
}.

T
5
= T
4
+ { v
3
, v
5
}.

T
6
= T
5
+ { v
2
, v
4
}.

T
7
= T
6
+ { v
5
, v
8
}.

Peso del rbol recubridor = 16.


rbol recubridor obtenido:




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 88 de 210
Recio Domnguez Daniel
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 e
1
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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 89 de 210
Recio Domnguez Daniel
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.




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 90 de 210
Recio Domnguez Daniel










rbol recubridor de peso mnimo obtenido. El peso del rbol recubridor es 16.


arista comp(v
1
) comp(v
2
) comp(v
3
) comp(v
4
) comp(v
5
) comp(v
6
) comp(v
7
) comp(v
8
) m M arista
1 2 3 4 5 6 7 8 * * *
e
1
={v
1
,v
6
} 1 2 3 4 5 1 7 8 1 6 e
1

e
2
={v
4
,v
5
} 1 2 3 4 4 1 7 8 4 5 e
2

e
3
={v
4
,v
7
} 1 2 3 4 4 1 4 8 4 7 e
3

e
4
={v
1
,v
4
} 1 2 3 1 1 1 1 8 1 4 e
4

e
5
={v
3
,v
5
} 1 2 1 1 1 1 1 8 1 3 e
5

e
6
={v
4
,v
6
} 1 2 1 1 1 1 1 8 * * *
e
7
={v
5
,v
7
} 1 2 1 1 1 1 1 8 * * *
e
8
={v
2
,v
4
} 1 1 1 1 1 1 1 8 1 2 e
8

e
9
={v
6
,v
7
} 1 1 1 1 1 1 1 8 * * *
e
10
={v
5
,v
8
} 1 1 1 1 1 1 1 1 1 8 e
10

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 91 de 210
Recio Domnguez Daniel
3.5.- Prfer

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

fmientras
fin
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 92 de 210
Recio Domnguez Daniel
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.














v
1
v
2
v
3
v
4
v
5
v
6
v
7

v
1
0 1 1 1
v
2
1 0 1 1 1
v
3
1 0
v
4
1 0
v
5
1 0
v
6
1 0
v
7
1 0
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 93 de 210
Recio Domnguez Daniel
La primera hoja encontrada es el vrtice v
3
y v
3
-v
1
es la arista que incide
en v
3
.

Eliminamos dicha arista y aadimos v
1
a la secuencia.

S = {v
1
}.














El rbol nos quedara





v
1
v
2
v
3
v
4
v
5
v
6
v
7

v
1
0 1 1
v
2
1 0 1 1
v
3
0
v
4
0
v
5
1 0
v
6
1 0
v
7
1 0
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 94 de 210
Recio Domnguez Daniel
La primera hoja encontrada es el vrtice v
4
y v
4
-v
2
es

la arista que incide
en v
4
.

Eliminamos dicha arista y aadimos v
2
a la secuencia.

S = {v
1
, v
2
}.















El rbol nos quedara






v
1
v
2
v
3
v
4
v
5
v
6
v
7

v
1
0 1 1
v
2
1 0 1 1 1
v
3
0
v
4
1 0
v
5
1 0
v
6
1 0
v
7
1 0
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 95 de 210
Recio Domnguez Daniel
La primera hoja encontrada es el vrtice v
5
y v
5
-v
1
es la arista que incide
en v
5
.

Eliminamos dicha arista y aadimos v
1
a la secuencia.

S = {v
1
, v
2
, v
1
}.














El rbol nos quedara







v
1
v
2
v
3
v
4
v
5
v
6
v
7

v
1
0 1
v
2
1 0 1 1
v
3
0
v
4
0
v
5
0
v
6
1 0
v
7
1 0
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 96 de 210
Recio Domnguez Daniel
La primera hoja encontrada es el vrtice v
6
y v
6
-v
2
es la arista que incide
en v
6
.

Eliminamos dicha arista y aadimos v
2
a la secuencia.

S = {v
1
, v
2
, v
1
, v
2
}.















El rbol nos quedara





v
1
v
2
v
3
v
4
v
5
v
6
v
7

v
1
0 1
v
2
1 0 1
v
3
0
v
4
0
v
5
0
v
6
0
v
7
1 0
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 97 de 210
Recio Domnguez Daniel
La primera hoja encontrada es el vrtice v
7
y v
7
-v
2
es la arista que incide
en v
7
.

Eliminamos dicha arista y aadimos v
2
a la secuencia.

S = {v
1
, v
2
, v
1
, v
2
, v
2
}.















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.
v
1
v
2
v
3
v
4
v
5
v
6
v
7

v
1
0 1
v
2
1 0
v
3
0
v
4
0
v
5
0
v
6
0
v
7
0
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 98 de 210
Recio Domnguez Daniel
Algoritmo de decodificacin.


El procedimiento de decodificacin siguiente convierte una secuencia de
Prfer en su correspondiente rbol.

Este procedimiento de decodificacin establece una funcin f
d
: P
n-2
T
n

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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 99 de 210
Recio Domnguez Daniel

Veamos el siguiente ejemplo:


Sea n = 7 y la secuencia S = {v
1
, v
2
, v
4,
v
6
, v
2
}.



PASO 1


Sea G el grafo:




PASO 2.1


Secuencia S = {v
1
, v
2
, v
4,
v
6
, v
2
}.

Vrtices no incluidos en la secuencia NS = {v
3
, v
5
, v
7
}.

Vrtices ocupados VO = {}.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 100 de 210
Recio Domnguez Daniel
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 = {v
3
, v
5
, v
7
}.

Insertamos en G la nueva arista v
1
-v
3
y eliminamos v
1
de la
secuencia.







PASO 2.2


Secuencia S = {v
2
, v
4,
v
6
, v
2
}.

Vrtices no incluidos en la secuencia NS = {v
1
, v
3
, v
5
, v
7
}.

Vrtices ocupados VO = {v
3
}.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 101 de 210
Recio Domnguez Daniel


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 = {v
1
, v
5
, v
7
}.

Insertamos en G la nueva arista v
2
-v
1
y eliminamos v
2
de la
secuencia.




PASO 2.3


Secuencia S = {v
4,
v
6
, v
2
}.

Vrtices no incluidos en la secuencia NS = {v
1
, v
3
, v
5
, v
7
}.

Vrtices ocupados VO = {v
1
, v
3
}.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 102 de 210
Recio Domnguez Daniel

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 = {v
5
, v
7
}.

Insertamos en G la nueva arista v
4
-v
5
y eliminamos v
4
de la
secuencia.




PASO 2.4


Secuencia S = {v
6
, v
2
}.

Vrtices no incluidos en la secuencia NS = {v
1
, v
3
, v
4
, v
5
, v
7
}.

Vrtices ocupados VO = {v
1
, v
3
, v
5
}.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 103 de 210
Recio Domnguez Daniel
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 = {v
4
, v
7
}.

Insertamos en G la nueva arista v
6
-v
4
y eliminamos v
6
de la
secuencia.




PASO 2.5


Secuencia S = {v
2
}.

Vrtices no incluidos en la secuencia NS = {v
1
, v
3
, v
4
, v
5
, v
6
, v
7
}.

Vrtices ocupados VO = {v
1
, v
3
, v
4
, v
5
}.


PASO 3.5
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 104 de 210
Recio Domnguez Daniel


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 = {v
6
, v
7
}.

Insertamos en G la nueva arista v
2
-v
6
y eliminamos v
2
de la
secuencia.




PASO 2.6


Secuencia S = {}.

Vrtices no incluidos en la secuencia NS = {v
1
, v
2
, v
3
, v
4
, v
5
, v
6
, v
7
}.

Vrtices ocupados VO = {v
1
, v
3
, v
4
, v
5
, v
6
}.




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 105 de 210
Recio Domnguez Daniel
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 = {v
2
, v
7
}.

Insertamos en G la nueva arista v
2
-v
7
y FIN.






Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 106 de 210
Recio Domnguez Daniel
3.6.- 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.

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:


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 107 de 210
Recio Domnguez Daniel

Comenzamos por el vrtice v
1
y construimos el camino alternado
formado por las aristas.



M = {v
1
, v
6
}.


A continuacin pasamos al vrtice v
2.
M = {v
2
, v
8
}.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 108 de 210
Recio Domnguez Daniel



Para el vrtice v
3
= {v
3
,v
7
}


Para el vrtice v
4
= {v
4
, v
9
}.


Para el vrtice v
5
= {{v
5
, v
9
}, {v
4
, v
6
}, {v
1
, v
7
}, {v
2
, v
8
}, {v
3
, v
10
}}


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 109 de 210
Recio Domnguez Daniel

Finalmente el emparejamiento nos queda.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 110 de 210
Recio Domnguez Daniel
Algoritmo de Kuhn-Munkres


Se trata de un algoritmo de emparejamiento de peso mximo para grafos
ponderados, bipartitos y completos.

Los grafos bipartitos completos k
m,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(v
i
) y L(u
j
) 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(v
i
) se inicializa con el mximo de la fila correspondiente al
vrtice v
i
en MatrizPesos[i, j] con (j <= | V |) (cardinal de V).

L(u
j
) se inicializa a cero para todo u
j
.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 111 de 210
Recio Domnguez Daniel
PASO 2


Seguidamente construimos un grafo que verifique la expresin:

L(u
j
) + L(v
i
) = 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(u
j
) + L(v
i
) = 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.



PASO 4

A continuacin cambiamos las etiquetas de los conjuntos L(v
i
) y L(u
j
).

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).

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 112 de 210
Recio Domnguez Daniel
D = U V(T).


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

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


P.4.3.- Finalmente cambiamos el etiquetado.

Para cada vrtice v
i
perteneciente a la interseccin restamos el valor del
mnimo en L(v
i
).

Para cada vrtice u
i
no perteneciente a la diferencia sumamos el valor
del mnimo en L(u
i
).

Volvemos al PASO 2.



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





Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 113 de 210
Recio Domnguez Daniel
PASO 1

Identificamos los conjuntos U y V.

U = {u
1
, u
2
, u
3
, u
4
, u
5
}.
V = {v
1
, v
2
, v
3
, v
4
, v
5
}.

Matriz de pesos del grafo, L(v
i
) y L(u
j
)












PASO 2.1


Construimos un grafo G
2.1
que verifique la expresin

L(u
j
) + Lv(v
i
) = MatrizPesos[i, j].

V/U u
1
u
2
u
3
u
4
u
5
L(v
i
)
v
1
5 1 1 3 2 5
v
2
0 1 3 3 4 4
v
3
2 5 4 3 0 5
v
4
2 2 3 4 4 4
v
5
6 2 0 0 1 6
L(u
j
) 0 0 0 0 0
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 114 de 210
Recio Domnguez Daniel
PASO 3.1


Buscamos un emparejamiento mximo en G
2.1
.


Como no se ha conseguido un emparejamiento mximo para los vrtices
del conjunto V cambiamos el etiquetado.



PASO 4.1


v
5
es el primer vrtice no emparejado perteneciente a V.

V(T) es el conjunto de vrtices del rbol alternado enraizado en
v
5
que no puede ser extendido ms.

V(T) = {v
5
, v
1,
u
1
}.

Calculamos los siguientes conjuntos.

V V(T) = {v
5
, v
1
}.

V V(T) = {u
2
, u
3
, u
4
, u
5
}.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 115 de 210
Recio Domnguez Daniel
Minimizamos la expresin L(u
j
) + L(v
i
) MatrizPesos[i, j] para los vrtices
que forman parte de los conjuntos I y D.

L(v
5
) + L(u
2
) - 2 = 4.

L(v
5
) + L(u
3
) - 0 = 6.

L(v
5
) + L(u
4
) - 0 = 6.

L(v
5
) + L(u
5
) - 1 = 5.

L(v
1
) + L(u
2
) - 1 = 4.

L(v
1
) + L(u
3
) - 1 = 4.

L(v
1
) + L(u
4
) - 3 = 2.

L(v
1
) + L(u
5
) - 2 = 3.


El mnimo es 2.

Ahora restamos el valor del mnimo a los vrtices que forman
parte del conjunto I en L(v
i
) y sumamos el valor del mnimo a los vrtices que
no forman parte del conjunto D en L(u
j
). Y volvemos al paso 2










PASO 2.2


Construimos un grafo G
2.2
que verifique la expresin

L(u
j
) + Lv(v
i
) = MatrizPesos[i, j].
V/U u
1
u
2
u
3
u
4
u
5
L(v
i
)
v
1
5 1 1 3 2 3
v
2
0 1 3 3 4 4
v
3
2 5 4 3 0 5
v
4
2 2 3 4 4 4
v
5
6 2 0 0 1 4
L(u
j
) 2 0 0 0 0
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 116 de 210
Recio Domnguez Daniel


Como no se ha conseguido un emparejamiento mximo para los vrtices
del conjunto V cambiamos el etiquetado.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 117 de 210
Recio Domnguez Daniel
PASO 3.2


Buscamos un emparejamiento mximo en G
2.2
.



PASO 4.2


v
5
es el primer vrtice no emparejado perteneciente a V.

V(T) es el conjunto de vrtices del rbol alternado enraizado en
v
5
que no puede ser extendido ms.

V(T) = {v
5
, v
1,
u
1
, v
4
, u
4
, v
2
, u
5
}.

Calculamos los siguientes conjuntos.

V V(T) = {v
5
, v
1
, v
4
, v
2
}.

V V(T) = {u
2
, u
3
}.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 118 de 210
Recio Domnguez Daniel
Minimizamos la expresin L(u
j
) + L(v
i
) MatrizPesos[i, j] para los vrtices
que forman parte de los conjuntos I y D.

L(v
5
) + L(u
2
) - 2 = 4.

L(v
5
) + L(u
3
) - 0 = 4.

L(v
1
) + L(u
2
) - 1 = 2.

L(v
1
) + L(u
3
) - 1 = 2.

L(v
4
) + L(u
2
) - 2 = 2.

L(v
4
) + L(u
3
) - 3 = 1.

L(v
2
) + L(u
2
) - 1 = 3.

L(v
2
) + L(u
3
) - 3 = 1.


El mnimo es 1.

Ahora restamos el valor del mnimo a los vrtices que forman
parte del conjunto I en L(v
i
) y sumamos el valor del mnimo a los vrtices que
no forman parte del conjunto D en L(u
j
). Y volvemos al paso 2











PASO 2.3


Construimos un grafo G
2.3
que verifique la expresin

L(u
j
) + Lv(v
i
) = MatrizPesos[i, j].

V/U u
1
u
2
u
3
u
4
u
5
L(v
i
)
v
1
5 1 1 3 2 2
v
2
0 1 3 3 4 3
v
3
2 5 4 3 0 5
v
4
2 2 3 4 4 3
v
5
6 2 0 0 1 3
L(u
j
) 3 0 0 1 1
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 119 de 210
Recio Domnguez Daniel

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 120 de 210
Recio Domnguez Daniel
PASO 3.3


Buscamos un emparejamiento mximo en G
2.3
.

Como todos los vrtices del conjunto V estn emparejados el algoritmo
termina.

El peso del emparejamiento es 21.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 121 de 210
Recio Domnguez Daniel
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.




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 122 de 210
Recio Domnguez Daniel
Encontrar el emparejamiento de peso mnimo en el siguiente grafo.







Realizar el preprocesamiento.

La arista v
5
u
1
es la que posee mayor ponderacin en el grafo. Su
peso es 6.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 123 de 210
Recio Domnguez Daniel
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 (v
1
, u
3
, 5).

Arista (v
2
, u
1
, 6).

Arista (v
3
, u
5
, 6).

Arista (v
4
, u
2
, 4).

Arista (v
5
, u
4
, 6).


El peso del emparejamiento es 27.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 124 de 210
Recio Domnguez Daniel
Deshacemos los cambios en las ponderaciones obteniendo el peso
original de las aristas.

Aristas del emparejamiento de peso mnimo:

Arista (v
1
, u
3
, 1).

Arista (v
2
, u
1
, 0).

Arista (v
3
, u
5
, 0).

Arista (v
4
, u
2
, 2).

Arista (v
5
, u
4
, 0).


El peso del emparejamiento es 3.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 125 de 210
Recio Domnguez Daniel
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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 126 de 210
Recio Domnguez Daniel
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
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 127 de 210
Recio Domnguez Daniel
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.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 128 de 210
Recio Domnguez Daniel
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
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 129 de 210
Recio Domnguez Daniel
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.






Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 130 de 210
Recio Domnguez Daniel

rbol de expansin:

Etapa


k = 0 {v
2
, v
3
, v
4
}

peso = 0







k = 1




{v
4
} {v
4
} {v
3
}
peso = 2 peso = 10 peso = 4






k = 2



peso = 5 peso = 14 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 (v
1
, v
3
, 10)
Arista (v
2
, v
4
, 4)

v
1
v
2
v
3
v
4
v
1 0 0 0
v
2
0 0 0
v
3
0 0 0
v
4
0 0 0

v
1
v
2
v
3
v
4
v
1 -1 1 -1
v
2
-1 -1 0
v
3
-1 -1 -1
v
4
-1 0 -1

v
1
v
2
v
3
v
4
v
1 -1 -1 1
v
2
-1 0 -1
v
3
-1 0 -1
v
4
-1 -1 -1

v
1
v
2
v
3
v
4
v
1 1 -1 -1
v
2
-1 -1 -1
v
3
-1 -1 0
v
4
-1 -1 0

v
1
v
2
v
3
v
4
v
1 1 -1 -1
v
2
-1 -1 -1
v
3
-1 -1 2
v
4
-1 -1 -2

v
1
v
2
v
3
v
4
v
1 -1 1 -1
v
2
-1 -1 2
v
3
-1 -1 -1
v
4
-1 -2 -1

v
1
v
2
v
3
v
4
v
1 -1 -1 1
v
2
-1 2 -1
v
3
-1 -2 -1
v
4
-1 -1 -1
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 131 de 210
Recio Domnguez Daniel
Emparejamiento mximo de peso mnimo.


rbol de expansin:

Etapa


k = 0 {v
2
, v
3
, v
4
}

peso = 0







k = 1




{v
4
} {v
4
} {v
3
}
peso = 2 peso = 10 peso = 4






k = 2



peso = 5 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 (v
1
, v
2
, 2)
Arista (v
3
, v
4
, 3)

v
1
v
2
v
3
v
4
v
1 0 0 0
v
2
0 0 0
v
3
0 0 0
v
4
0 0 0

v
1
v
2
v
3
v
4
v
1 -1 1 -1
v
2
-1 -1 0
v
3
-1 -1 -1
v
4
-1 0 -1

v
1
v
2
v
3
v
4
v
1 -1 -1 1
v
2
-1 0 -1
v
3
-1 0 -1
v
4
-1 -1 -1

v
1
v
2
v
3
v
4
v
1 1 -1 -1
v
2
-1 -1 -1
v
3
-1 -1 0
v
4
-1 -1 0

v
1
v
2
v
3
v
4
v
1 1 -1 -1
v
2
-1 -1 -1
v
3
-1 -1 2
v
4
-1 -1 -2

v
1
v
2
v
3
v
4
v
1 -1 -1 1
v
2
-1 2 -1
v
3
-1 -2 -1
v
4
-1 -1 -1
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 132 de 210
Recio Domnguez Daniel
Seguidamente un par de ejemplos para grafos con un mayor nmero de
vrtices y aritas.

Ejemplo 1.



Aristas del emparejamiento de peso mximo:


Arista (v
1
, u
4
, 3).

Arista (v
2
, u
3
, 3).

Arista (v
3
, u
2
, 5).

Arista (v
4
, u
5
, 4).

Arista (v
5
, u
1
, 6).


El peso del emparejamiento es 21.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 133 de 210
Recio Domnguez Daniel
Aristas del emparejamiento ptimo de peso mnimo:


Arista (v
1
, u
3
, 1).

Arista (v
2
, u
1
, 0).

Arista (v
3
, u
5
, 0).

Arista (v
4
, u
2
, 2).

Arista (v
5
, u
4
, 0).


El peso del emparejamiento es 3.



Ejemplo 2.



Aristas del emparejamiento ptimo de peso mximo:


Arista (v
1
, v
5
, 4).

Arista (v
2
, v
6
, 1).


El peso del emparejamiento es 5.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 134 de 210
Recio Domnguez Daniel

Aristas del emparejamiento ptimo de peso mnimo:


Arista (v
1
, v
4
, 2).

Arista (v
2
, v
5
, -1).


El peso del emparejamiento es 1.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 135 de 210
Recio Domnguez Daniel
3.7.- 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
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 136 de 210
Recio Domnguez Daniel

Vrtices grado
v
1
4
v
2
4
v
3
4
v
4
2
v
5
2
v
6
2
v
7
2


Como todos los vrtices son de valencia par el grafo es euleriano.


Ejemplo 2.



Vrtices grado
v
1
3
v
2
4
v
3
4
v
4
2
v
5
2
v
6
1


Como el grafo posee dos vrtices impares no es euleriano.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 137 de 210
Recio Domnguez Daniel
A continuacin expondremos los ejemplos para los grafos dirigidos.

Grafos dirigidos.

Ejemplo 1

Vrtices Entrada Salida
v
1
2 2
v
2
2 2
v
3
2 2
v
4
2 2
v
5
3 3
v
6
2 2
v
7
1 1


Como todos los vrtices tienen el grado de salida igual al grado de
entrada el grafo es euleriano.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 138 de 210
Recio Domnguez Daniel
Ejemplo 2



Vrtices Entrada Salida
v
1
2 2
v
2
2 1
v
3
2 1
v
4
2 2
v
5
1 1


Como existen vrtices cuyo grado de salida es distinto al grado de
entrada el grafo no es euleriano.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 139 de 210
Recio Domnguez Daniel
3.8.- 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.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 140 de 210
Recio Domnguez Daniel
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
v
1
2
v
2
2
v
3
3
v
4
3
v
5
2
v
6
2
v
7
2
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 141 de 210
Recio Domnguez Daniel


Como posee dos vrtices impares y el grafo es no dirigido posee una
trayectoria euleriana abierta.

Los vrtices impares son v
3
y v
4
.

Comenzamos por el primer vrtice impar v
3
.

v
3
v
1


v
3
v
1
v
2

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



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 142 de 210
Recio Domnguez Daniel
v
3
v
1
v
2
v
3

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





v
3
v
1
v
2
v
3
v
4

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





Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 143 de 210
Recio Domnguez Daniel
v
3
v
1
v
2
v
3
v
4
v
5




v
3
v
1
v
2
v
3
v
4
v
5
v
6

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



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 144 de 210
Recio Domnguez Daniel
v
3
v
1
v
2
v
3
v
4
v
5
v
6
v
7

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




v
3
v
1
v
2
v
3
v
4
v
5
v
6
v
7
v
4
.


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



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 145 de 210
Recio Domnguez Daniel
Encontrar una trayectoria euleriana en el siguiente grafo dirigido.


.


Vrtices Entrada Salida
v
1
2 2
v
2
1 1
v
3
1 1
v
4
2 2
v
5
2 1
v
6
0 1


El grafo no es euleriano pues existen vrtices con grado de entrada y
salida distintos, concretamente v
5
y v
6
. En este caso podemos intentar
encontrar dicha trayectoria partiendo de algunos de los vrtices anteriores.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 146 de 210
Recio Domnguez Daniel
Los vrtices con grado de entrada distinto del grado de salida son v
5
y v
6
.

Comenzamos por el primer vrtice impar v
5
.

v
5
v
4






v
5
v
4
v
1


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 147 de 210
Recio Domnguez Daniel

v
5
v
4
v
1
v
2





v
5
v
4
v
1
v
2
v
3






Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 148 de 210
Recio Domnguez Daniel



v
5
v
4
v
1
v
2
v
3
v
4


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






v
5
v
4
v
1
v
2
v
3
v
4
v
2

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



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 149 de 210
Recio Domnguez Daniel

v
5
v
4
v
1
v
2
v
3
v
4
v
2
v
5
.

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





En el siguiente paso nos damos cuenta que el vrtice v
5
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.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 150 de 210
Recio Domnguez Daniel

Comenzamos por el primer vrtice impar v
6
.

v
6
v
1


v
6
v
1
v
2

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 151 de 210
Recio Domnguez Daniel


v
6
v
1
v
2
v
3


v
6
v
1
v
2
v
3
v
4


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

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 152 de 210
Recio Domnguez Daniel
v
6
v
1
v
2
v
3
v
4


v
1

v
6
v
1
v
2
v
3
v
4


v
1
v
5

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



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 153 de 210
Recio Domnguez Daniel
v
6
v
1
v
2
v
3
v
4


v
1
v
5
v
4

v
6
v
1
v
2
v
3
v
4


v
1
v
5
v
4
v
2

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



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 154 de 210
Recio Domnguez Daniel
v
6
v
1
v
2
v
3
v
4


v
1
v
5
v
4
v
2
v
5
.





En este caso partiendo desde el otro vrtice impar es posible encontrar la
trayectoria euleriana abierta pero puede ocurrir que dicha trayectoria no exista.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 155 de 210
Recio Domnguez Daniel
Veamos un ejemplo de grafo dirigido el que solo existen dos vrtices de
grado impar pero no existe una trayectoria euleriana.






Vrtices Entrada Salida
v
1
0 2
v
2
3 1
v
3
1 1
v
4
1 1
v
5
1 1


En este caso no existe trayectoria euleriana pues es imposible visitar las
aristas v
1
v
2
y v
1
v
5
si partimos del vrtice v
2
. Si por el contrario partiramos del
vrtice v
1
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.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 156 de 210
Recio Domnguez Daniel
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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 157 de 210
Recio Domnguez Daniel
Aplicaremos el algoritmo de Tucker al siguiente grafo no dirigido.



Vrtices Grado
v
1
4
v
2
4
v
3
2
v
4
4
v
5
2
v
6
2
v
7
2
v
8
2
v
9
2
v
10
2
v
11
2
v
12
2

Los vrtices cuyo grado es mayor que dos son v
1
, v
2
y v
4
. Estos vrtices
sern duplicados hasta conseguir reducir el grado a dos para cada uno de
ellos.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 158 de 210
Recio Domnguez Daniel
Duplicamos el vrtice v
1
dando el vrtice v
13
.



Duplicamos el vrtice v
2
dando el vrtice v
14
.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 159 de 210
Recio Domnguez Daniel
Finalmente para que todos los vrtices posean grado 2 duplicamos el
vrtice v
4
dando el vrtice v
15
.




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
v
1
v
13
v
2
v
14
v
4
v
15


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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 160 de 210
Recio Domnguez Daniel
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 v
4
y el vrtice resultado de
la duplicacin v
15
.

Reconstruimos los dos ciclos identificando el vrtice.

Primer ciclo {v
4
-v
7
-v
8
-v
9
-v
4
}.

Segundo ciclo {v
4
-v
3
-v
1
-v
2
-v
4
}.

Identificamos el vrtice y reensamblamos los ciclos.



Ciclo reensamblado {v
4
-v
7
-v
8
-v
9
-v
4
-v
3
-v
1
-v
2
-v
4
}.


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 v
2
y el vrtice resultado de la
duplicacin v
14

Reconstruimos el ciclo identificando el vrtice {v
2
-v
5
-v
6
-v
2
}
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 161 de 210
Recio Domnguez Daniel
Identificamos el vrtice.



Reensamblamos el nuevo ciclo en la trayectoria parcialmente construida
por el final.

{v
4
-v
7
-v
8
-v
9
-v
4
-v
3
-v
1
-v
2
-v
5
-v
6
-v
2
-v
4
}.

Finalmente escogemos el vrtice duplicado v
1
y el vrtice resultado de la
duplicacin v
13
.


Construimos el ciclo identificando el vrtice {v
1
-v
10
-v
11
-v
12
-v
1
}

Por ltimo identificamos los vrtices y reensamblamos el ciclo por el final
en la trayectoria euleriana parcialmente construida obteniendo la trayectoria
cerrada completa.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 162 de 210
Recio Domnguez Daniel

Trayectoria euleriana cerrada {v
4
-v
7
-v
8
-v
9
-v
4
-v
3
-v
1
-v
10
-v
11
-v
12
-v
1
-v
2
-v
4
}.



Veamos otro ejemplo:

Vrtices Grado
v
1
4
v
2
2
v
3
2
v
4
4
v
5
2
v
6
2
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 163 de 210
Recio Domnguez Daniel
Los vrtices cuyo grado es mayor que dos son v
1
y v
4
. Estos vrtices
sern duplicados hasta conseguir reducir el grado a dos para cada uno de
ellos.


Duplicamos el vrtice v
1
dando el vrtice v
7
.


Para terminar de conseguir que todos los vrtices tengan grado 2
duplicaremos el vrtice v
4
dando el vrtice

v
8
.



Vrtice duplicado Vrtice con el que se identifica
v
1
v
7
v
4
v
8

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 164 de 210
Recio Domnguez Daniel
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 v
4
y el vrtice resultado de
la duplicacin v
8
.


Reconstruimos los dos ciclos identificando el vrtice.

Primer ciclo {v
4
-v
1
-v
2
-v
3
-v
4
}.

Segundo ciclo {v
4
-v
5
-v
7
-v
6
-v
4
}.

Identificamos el vrtice y reensamblamos los ciclos.



Ciclo reensamblado {v
4
-v
1
-v
2
-v
3
-v
4
-v
5
-v
7
-v
6
-v
4
}.

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


Borrego Ropero Rafael 165 de 210
Recio Domnguez Daniel
Identificamos el ltimo vrtice duplicado que nos queda v
1
con v
7
.



Identificamos el vrtice en la trayectoria {v
4
-v
1
-v
2
-v
3
-v
4
-v
5
-v
1
-v
6
-v
4
}.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 166 de 210
Recio Domnguez Daniel
Finalmente detallaremos un ejemplo para un grafo dirigido.




Vrtices Entrada Salida
v
1
3 3
v
2
1 1
v
3
1 1
v
4
1 1
v
5
2 2
v
6
1 1
v
7
1 1
v
8
1 1
v
9
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 v
1
y v
5
.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 167 de 210
Recio Domnguez Daniel
Duplicamos el vrtice v
1
dando el vrtice v
10
.



Duplicamos el vrtice v
1
dando el vrtice v
11
.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 168 de 210
Recio Domnguez Daniel
Duplicamos el vrtice v
5
dando el vrtice v
12
.



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
v
1
v
10
v
1
v
11
v
5
v
12


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 v
1
y el vrtice resultado de la duplicacin v
1
.


Reconstruimos los dos ciclos identificando el vrtice.

Primer ciclo {v
1
-v
2
-v
3
-v
1
}.

Segundo ciclo {v
1
-v
9
-v
1
}.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 169 de 210
Recio Domnguez Daniel
Identificamos el vrtice y reensamblamos los ciclos.

Ciclo reensamblado {v
1
-v
2
-v
3
-v
1
-v
9
-v
1
}.

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 v
1
y el vrtice resultado de la
duplicacin v
11
.

Construimos el ciclo identificando el vrtice {v
1
-v
4
-v
12
-v
6
-v
7
-v
5
-v
8
-v
1
}.

Identificamos el vrtice.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 170 de 210
Recio Domnguez Daniel
Reensamblamos los ciclos {v
1
-v
2
-v
3
-v
1
-v
9
-v
1
-v
4
-v
12
-v
6
-v
7
-v
5
-v
8
-v
1
}.

Como el grafo ya es conexo tan solo nos falta identificar el resto de
vrtices duplicados.

Finalmente identificamos el vrtice duplicado v
5
y el vrtice resultado de
la duplicacin v
12
y obtenemos la trayectoria euleriana cerrada.



Identificamos el vrtice en la trayectoria {v
1
-v
2
-v
3
-v
1
-v
9
-v
1
-v
4
-v
5
-v
6
-v
7
-v
5
-v
8
-v
1
}.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 171 de 210
Recio Domnguez Daniel
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.

El primer ciclo podemos construirlo partiendo de cualquier vrtice del
grafo, por ejemplo v
5
.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 172 de 210
Recio Domnguez Daniel
Obtenemos el ciclo {v
5
-v
2
-v
1
-v
3
-v
4
-v
2
-v
6
-v
5
}.

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 v
1
y obtenemos el ciclo {v
1
-v
10
-v
11
-v
12
-v
1
}.

Ahora reensamblamos los ciclos:

{v
5
-v
2
-v
1
-v
10
-v
11
-v
12
-v
1
-v
3
-v
4
-v
2
-v
6
-v
5
}.

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 v
4
, obteniendo el ciclo
{v
4
-v
7
-v
8
-v
9
-v
4
}.

Ahora concatenamos los ciclos y obtenemos la trayectoria euleriana
cerrada.

{v
5
-v
2
-v
1
-v
10
-v
11
-v
12
-v
1
-v
3
-v
4
-v
7
-v
8
-v
9
-v
4
-v
2
-v
6
-v
5
}.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 173 de 210
Recio Domnguez Daniel
Veamos un ejemplo para un grafo dirigido.



El primer ciclo podemos construirlo partiendo de cualquier vrtice del
grafo, por ejemplo v
3
.

Obtenemos el ciclo {v
3
-v
1
-v
2
-v
3
}.

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 v
1
y obtenemos el ciclo {v
1
-v
4
-v
5
-v
6
-v
7
-v
5
-v
8
-v
1
}.

Ahora reensamblamos los ciclos:

{v
3
-v
1
-v
4
-v
5
-v
6
-v
7
-v
5
-v
8
-v
1
-v
2
-v
3
}.

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 v
1
, obteniendo el ciclo
{v
1
-v
9
-v
1
}.

Ahora concatenamos los ciclos y obtenemos la trayectoria euleriana
cerrada.

{v
3
-v
1
-v
9
-v
1
-v
4
-v
5
-v
6
-v
7
-v
5
-v
8
-v
1
-v
2
-v
3
}.




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 174 de 210
Recio Domnguez Daniel
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 k
n
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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 175 de 210
Recio Domnguez Daniel
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
v
1
4
v
2
4
v
3
3
v
4
4
v
5
3
v
6
1
v
7
1


PASO 1


Los vrtices impares son v
3
, v
5
, v
6
y v
7
.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 176 de 210
Recio Domnguez Daniel
PASO 2


Construimos el grafo completo formado por los vrtices v
3
, v
5
, v
6
y v
7
.




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.


d
G
(v
3
,

v
5
) = 2.

d
G
(v
3
,

v
6
) = 7.

d
G
(v
3
,

v
7
) = 2.

d
G
(v
5
,

v
7
) = 4.

d
G
(v
6
,

v
5
) = 6.

d
G
(v
6
,

v
7
) = 9.





Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 177 de 210
Recio Domnguez Daniel


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 v
3
v
7
y v
5
v
6
.



PASO 4


Ahora debemos duplicar en G las aristas del camino mnimo existente
entre los vrtices emparejados para lo cual volvemos a aplicar Dijkstra.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 178 de 210
Recio Domnguez Daniel
Obtenemos las aristas que forman parte del camino mnimo entre v
3
y v
7
.


Obtenemos las aristas que forman parte del camino mnimo entre v
5
y v
6
.


Las aristas coloreadas de azul se duplican en G.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 179 de 210
Recio Domnguez Daniel
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 v
6
-v
1
-v
2
-v
1
-v
4
-v
2
-v
4
-v
3
-v
7
-v
3
-v
4
-v
5
-v
2
-v
5
-v
1
-v
6
.

Orden en el que se recorren las aristas:


Arista (v
6
, v
1
, 2).

Arista (v
1
, v
2
, 3).

Arista (v
2
, v
1
, 3)

Arista (v
1
, v
4
, 4).

Arista (v
4
, v
2
, 6).

Arista (v
2
, v
4
, 6).

Arista (v
4
, v
3
, 1).

Arista (v
3
, v
7
, 2).

Arista (v
7
, v
3
, 2).

Arista (v
3
, v
4
, 1).

Arista (v
4
, v
5
, 1).

Arista (v
5
, v
2
, 1).

Arista (v
2
, v
5
, 1).

Arista (v
5
, v
1
, 5).

Arista (v
1
, v
6
, 2).



El peso total del recorrido es 36 unidades.




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 180 de 210
Recio Domnguez Daniel
5.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 v
i
un color c
i
/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.






Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 181 de 210
Recio Domnguez Daniel
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: v
1
, v
2
, v
3
, v
4
, v
5
, v
6
, v
7
.

























vrtices

v
1
v
2
v
3
v
4
v
5
v
6
v
7
color 1 2 1 3 1 2 2
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 182 de 210
Recio Domnguez Daniel
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: v
2
, v
4
, v
5
, v
1
, v
3
, v
6
, v
7
.








vrtices

v
1
v
2
v
3
v
4
v
5
v
6
v
7
color 3 1 2 2 3 1 1
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 183 de 210
Recio Domnguez Daniel
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 v
n
como el vrtice de menor grado, luego se elige v
n-1
como el
vrtice de menor grado en G-{v
n
} (prescindiendo del vrtice v
n
), y as se
contina examinando los vrtices de menor grado y eliminndolos del grafo.


A continuacin aplicaremos la coloracin de Matatula-Marble-Isaacson al
grafo anterior.


Orden de coloracin: v
5
, v
4
, v
2
, v
1
, v
7
, v
3
, v
6
.








vrtices

v
1
v
2
v
3
v
4
v
5
v
6
v
7
color 1 3 1 2 1 2 2
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 184 de 210
Recio Domnguez Daniel
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.



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 185 de 210
Recio Domnguez Daniel
A continuacin aplicaremos la coloracin de Brelaz al grafo anterior.







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 v
2
al cual se le asigna el color 1. Tras colorearlo el grado de saturacin
sus vrtices adyacentes aumenta en una unidad.










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 v
4
al cual se le asigna el menor color posible. En este caso el color 2.










vrtices

v
1
v
2
v
3
v
4
v
5
v
6
v
7
grado g(V) 2 4 2 3 3 1 1
saturacin gs(V) 0 0 0 0 0 0 0
color - - - - - - -
orden - - - - - - -
vrtices

v
1
v
2
v
3
v
4
v
5
v
6
v
7
grado g(V) 2 4 2 3 3 1 1
saturacin gs(V) 1 0 1 1 1 0 0
color - 1 - - - - -
orden - 1 - - - - -
vrtices

v
1
v
2
v
3
v
4
v
5
v
6
v
7
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 - - -
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 186 de 210
Recio Domnguez Daniel
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

v
1
v
2
v
3
v
4
v
5
v
6
v
7
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

v
1
v
2
v
3
v
4
v
5
v
6
v
7
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 - -
vrtices

v
1
v
2
v
3
v
4
v
5
v
6
v
7
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

v
1
v
2
v
3
v
4
v
5
v
6
v
7
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 -
orden 4 1 5 2 3 6 -
vrtices

v
1
v
2
v
3
v
4
v
5
v
6
v
7
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
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 187 de 210
Recio Domnguez Daniel

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 188 de 210
Recio Domnguez Daniel
Es bipartito?

Los grafos bipartitos k
n
,
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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 189 de 210
Recio Domnguez Daniel
Aplicamos el algoritmo de Brelaz.



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

Veamos otro ejemplo



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 190 de 210
Recio Domnguez Daniel
Aplicamos el algoritmo de Brelaz.




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

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 191 de 210
Recio Domnguez Daniel
3.9.- 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.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 192 de 210
Recio Domnguez Daniel


Rellenamos el cuadrado latino.


vrtices v1 v2 v3 v4 v5 v6 v7 v8 v9
v1 0 1 2

3

4
5
v2 1 0 3

v3 2 3 0

1

v4

0 2 1

v5 3

1 2 0 4
5
v6

1 4 0

v7 4

0 1

v8

1 0

v9 5
0


Lgicamente el cuadrado latino es simtrico pues las aristas v
i
v
j
o v
j
v
i
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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 193 de 210
Recio Domnguez Daniel

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 194 de 210
Recio Domnguez Daniel
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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 195 de 210
Recio Domnguez Daniel





Calculamos un emparejamiento maximal al cual le asignamos el color 1.

Arista (v
1
, v
2
).
Arista (v
3
, v
5
).
Arista (v
4
, v
6
).
Arista (v
7
, v
8
).


Eliminamos del grafo las aristas del primer emparejamiento.




Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 196 de 210
Recio Domnguez Daniel



Calculamos otro emparejamiento maximal y le asignamos el color 2.

Arista (v
1
, v
7
).
Arista (v
2
, v
3
).
Arista (v
4
, v
5
).


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 197 de 210
Recio Domnguez Daniel
Eliminamos del grafo las aristas del segundo emparejamiento.






Calculamos otro emparejamiento maximal y le asignamos el color 3.

Arista (v
1
, v
3
).
Arista (v
5
, v
6
).
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 198 de 210
Recio Domnguez Daniel
Eliminamos del grafo las aristas del tercer emparejamiento.





Calculamos otro emparejamiento maximal y le asignamos el color 4.

Arista (v
1
, v
5
).
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 199 de 210
Recio Domnguez Daniel
Eliminamos del grafo la arista del cuarto emparejamiento.





Calculamos otro emparejamiento maximal y le asignamos el color 5.

Arista (v
5
, v
8
).
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 200 de 210
Recio Domnguez Daniel
Eliminamos del grafo la arista del quinto emparejamiento.


Como no quedan aristas por colorear el algoritmo termina.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 201 de 210
Recio Domnguez Daniel
3.10.- 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.

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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 202 de 210
Recio Domnguez Daniel
Ejemplo 1.












El grafo es hamiltoniano pues todos los vrtices tienen valencia mayor o
igual que 3.




Vrtices (V) n/2
v
1
5 6/2 = 3
v
2
3 6/2 = 3
v
3
4 6/2 = 3
v
4
4 6/2 = 3
v
5
3 6/2 = 3
v
6
3 6/2 = 3
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 203 de 210
Recio Domnguez Daniel
Ejemplo 2.

















Como existen vrtices que no cumplen la relacin, no podemos asegurar
que el grafo no sea hamiltoniano.
Vrtices (V) n/2
v
1
6 8/2 = 4
v
2
3 8/2 = 4
v
3
4 8/2 = 4
v
4
4 8/2 = 4
v
5
3 8/2 = 4
v
6
4 8/2 = 4
v
7
2 8/2 = 4
v
8
2 8/2 = 4
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 204 de 210
Recio Domnguez Daniel
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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 205 de 210
Recio Domnguez Daniel
Comenzaremos por la Clase Solucin

Clase Solucin

// Atributos
solucin : Array de enteros.

fclase


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.

Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 206 de 210
Recio Domnguez Daniel
El entero i se utiliza para iterar y seleccionar el vrtice candidato,
operacin realizada en el mtodo seleccionaCandidato.


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



Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 207 de 210
Recio Domnguez Daniel
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.
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.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 208 de 210
Recio Domnguez Daniel
Al lado de cada tupla entre llaves aparecen lo candidatos.


Etapa [-, -, -] {v
1
, v
2
, v
3
}

k= 0




[v
1
, -, -] {v
2
, v
3
} [v
2
, -, -] {v
1
, v
3
} [v
3
, -, -] {v
1
, v
2
}

k = 1

[v
1
, v
2
, -] [v
1
, v
3
, -] [v
2
, v
1
, -] [v
2
, v
3
, -] [v
3
, v
1
, -] [v
3
, v
2
, -]

k = 2 {v
3
} {v
2
} {v
3
} {v
1
} {v
2
} {v
1
}

[v
1
, v
2
, v
3
] [v
1
, v
3
, v
2
] [v
2
, v
1
, v
3
] [v
2
, v
3
, v
1
] [v
3
, v
1
, v
2
] [v
3
, v
2
, v
1
]



La solucin encontrada es v
1
-v
2
-v
3
si se desea el camino o v
1
-v
2
-v
3
-v
1
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.
Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 209 de 210
Recio Domnguez Daniel
Etapa
[-, -, -, -] {v
1
, v
2
, v
3
, v
4
}

k = 0


[v
1
, -, -, -,] {v
2
, v
3
, v
4
} [v
2
, -, -, -] {v
1
}

k = 1


[v
1
, v
2
, -, -] {} [v
1
, v
3
, -, -] {v
4
} [v
1
, v
4
, -, -] {v
3
} [v
2
, v
1
, -, -] {v
3
, v
4
}

k = 2

[v
1
, v
3
, v
4
, -] {} [v
1
, v
4
, v
3
, -] {} [v
2
, v
1
, v
3
, -] {v
4
}

k = 3

[v
2
, v
1
, v
3
, v
4
]
El camino hamiltoniano es v
2
-v
1
-v
3
-v
4
.

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





















El ciclo hamiltoniano es v
3
-v
5
-v
1
.v
2
.v
4
-v
6-
v
3
.


Documentacin de la aplicacin Algraf Project


Borrego Ropero Rafael 210 de 210
Recio Domnguez Daniel
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.

Anda mungkin juga menyukai