Documentos de Académico
Documentos de Profesional
Documentos de Cultura
AlgoritmosDeGrafos PDF
AlgoritmosDeGrafos PDF
MANUAL DE ALGORTMICA
1 de 248
Manual de algortmica
2 de 248
Manual de algortmica
1.- Introduccin................................................................................................... 6
2.- Conceptos generales. ................................................................................... 8
Grafos, tipos, ejemplos................................................................................ 8
Algunas definiciones. ................................................................................ 12
Algunos grafos bsicos. ............................................................................ 17
Tipos de rutas ........................................................................................... 46
Grafo complementario............................................................................... 48
Grafo de lnea. .......................................................................................... 50
3.- Algoritmos implementados. ......................................................................... 54
3.1.- Algoritmos sobre caminos mnimos. ..................................................... 54
Algoritmo de Dijkstra. ................................................................................ 54
Algoritmo de Floyd. ................................................................................... 61
3.2.- Algoritmos de distancias....................................................................... 65
Excentricidad de un vrtice. ...................................................................... 65
Radio de un grafo...................................................................................... 67
Dimetro de un grafo................................................................................. 69
Distancia de un vrtice. ............................................................................. 70
Algoritmo de la mediana............................................................................ 72
Algoritmo del centro. ................................................................................. 73
3.3.- Conectividad......................................................................................... 75
Algoritmo de componentes conexas. ........................................................ 75
Vrtices de corte. ...................................................................................... 77
Aristas puente. .......................................................................................... 78
Bloques. .................................................................................................... 79
3.4.- Algoritmos de bsquedas. .................................................................... 88
Bsqueda en profundidad (DFS) .............................................................. 88
Bsqueda en anchura (BFS) .................................................................... 90
3.5.- rboles recubridores de peso mnimo. ................................................. 92
Algoritmo de Boruvka. ............................................................................... 92
Algoritmo de Prim...................................................................................... 98
Algoritmo de Kruskal. .............................................................................. 100
3.6.- Prufer.................................................................................................. 103
Algoritmo de codificacin. ....................................................................... 103
Algoritmo de decodificacin. ................................................................... 110
3.7.- Algoritmo de emparejamientos ........................................................... 120
Algoritmo de emparejamiento maximal simple........................................ 121
Algoritmo de Kuhn-Munkres.................................................................... 128
Algoritmo de Kuhn-Munkres con preprocesamiento (peso mnimo)........ 142
Algoritmo de emparejamiento maximal de peso ptimo.......................... 146
3.8.- Euler ................................................................................................... 157
Es euleriano ?. ..................................................................................... 157
3.9.- Algoritmos de bsqueda de trayectorias eulerianas. .......................... 162
Algoritmo de Fleury ................................................................................. 162
Algoritmo de Tucker. ............................................................................... 183
Algoritmo de Hierholzer........................................................................... 201
Problema del cartero ............................................................................... 205
3.10.- Algoritmos de vrtice coloracin....................................................... 212
Algoritmo de coloracin Secuencial o Voraz. .......................................... 213
3 de 248
Manual de algortmica
Algoritmo de coloracin Welsh-Powell .................................................... 215
Algoritmo de coloracin Matula-Marble-Isaacson ................................... 216
Algoritmo de coloracin de Brelaz........................................................... 217
Es bipartito? .......................................................................................... 221
3.11.- Algoritmos de aristas coloracin....................................................... 225
Algoritmo basado en rellenar un cuadrado latino .................................... 225
Algoritmo basado en emparejamientos maximales................................. 228
3.-12.- Hamilton .......................................................................................... 235
Algoritmo de Dirac................................................................................... 235
Bsqueda de trayectorias hamiltonianas................................................. 239
4.- Bibliografa ................................................................................................ 248
4 de 248
Manual de algortmica
5 de 248
Manual de algortmica
1.- Introduccin.
Nos encontramos ante una aplicacin desarrollada para el departamento
de matemtica aplicada I con el objetivo de proporcionar una herramienta que
ayude al desarrollo de las prcticas de las asignaturas dedicadas al estudio de
los grafos y la investigacin.
La aplicacin desarrollada tiene como objetivos mejorar algunos
aspectos de la aplicacin Algraf la cual ha sido punto de partida de este
proyecto por lo que se mantiene la compatibilidad con versiones anteriores.
La aplicacin resuelve todos los problemas recogidos en versiones
anteriores de Algraf y se han incluido algunos nuevos por los que ahora la
aplicacin da solucin a gran cantidad de problemas entre los que podemos
destacar.
- Problema de rutas.
- Problemas de ubicacin.
- Problemas de compatibilidades o coloracin.
- Problemas de minimizacin de costes.
- Problemas de emparejamientos.
6 de 248
Manual de algortmica
7 de 248
Manual de algortmica
v7
v1
v2
v3
v4
v5
v6
v1
v2
1
1
1
v3
v4
1
1
v5
1
v6
v7
8 de 248
Manual de algortmica
Si dos o ms aristas unen el mismo par de vrtices se llaman
aristas paralelas y en este caso tenemos un multigrafo.
Si una arista une un mismo vrtice se trata de un lazo o bucle.
Si en un grafo se permite aristas paralelas y bucles obtenemos un
seudografo.
v1
v2
v3
v4
v5
v1
v2
v3
1
v4
v5
1
9 de 248
Manual de algortmica
Un grafo es ponderado si cada arista lleva asociada una magnitud,
longitud, dificultad al recorrerla
Ejemplo de grafo ponderado no dirigido.
v1
v2
v3
v4
v5
v6
v7
v1
5
2
v2
3
3
6
1
v3
v4
6
1
v5
5
1
v6
2
v7
10 de 248
Manual de algortmica
Ejemplo de grafo ponderado dirigido.
Matriz de adyacencias.
v1
v2
v3
v4
v5
v6
v7
v8
v1
v2
2
v3
3
v4
v5
v6
1
1
v7
v8
4
2
11 de 248
Manual de algortmica
Algunas definiciones.
Subgrafo.
Un grafo H es subgrafo de un grafo G si V(H) V(G).
Ejemplo.
12 de 248
Manual de algortmica
Subgrafo H.
No es un subgrafo.
13 de 248
Manual de algortmica
Subgrafo inducido por vrtices.
14 de 248
Manual de algortmica
Subgrafo inducido por lo vrtices {v1, v4, v5, v6}.
15 de 248
Manual de algortmica
Ejemplo
Subgrafo inducido por las aristas {v1v4, v4v5, v5v6, v6v3, v4v3}.
16 de 248
Manual de algortmica
Grafos completos.
Sea G un grafo de orden p. G es completo si dos vrtices cualesquiera
del grafo son siempre adyacentes, es decir, todos sus vrtices tienen
valencia o grado p-1 (kp).
Ejemplo k4.
Ejemplo k5.
17 de 248
Manual de algortmica
Caminos simples.
Ciclos.
18 de 248
Manual de algortmica
19 de 248
Manual de algortmica
rbol.
Un rbol de n vrtices es un grafo conexo, sin ciclos con exactamente
n-1 aristas.
Adems posee las siguientes propiedades.
a) Dos vrtices cualesquiera estn unidos por un nico camino.
b) Si al grafo le eliminamos cualquiera de sus aristas queda
dividido exactamente en dos componentes conexas dando lugar a un
bosque.
Ejemplo.
20 de 248
Manual de algortmica
Bosque
Conjunto de rboles.
Ejemplo.
21 de 248
Manual de algortmica
22 de 248
Manual de algortmica
Grafos nulos
23 de 248
Manual de algortmica
Rueda
Como en los casos de los grafos ciclos y los grafos estrella, la familia de
los grafos ruedas toma su apelativo de la figura con la que se representan
estos grafos. En este caso, la figura que muestra un grafo rueda viene a ser el
resultado de la unin de las dos familias citadas anteriormente, esto es, un
vrtice central rodeado de los dems vrtices del grafo en forma de crculo, de
forma que stos se unen mediante aristas entre vrtices consecutivos, y, a su
vez, mediante una arista ms, quedan unidos al vrtice central, dando al
conjunto el aspecto de una rueda con sus radios.
As, para cada n4, el grafo rueda, W n, con n+1 vrtices, se define como
la unin K1+Cn, de un vrtice aislado con un ciclo de longitud n.
24 de 248
Manual de algortmica
Cubos
Cubo de dimensin 1.
25 de 248
Manual de algortmica
Cubo de dimensin 2.
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.
26 de 248
Manual de algortmica
Cubo de dimensin 4.
27 de 248
Manual de algortmica
Cubo de dimensin 5.
Para terminar con los grafos relativos a la familia de los cubos ndimensionales que se incluyen en la aplicacin del presente proyecto fin de
carrera, el cubo de 5 dimensiones constar, naturalmente, de 32 vrtices con
80 aristas. Como en el resto de cubos, se puede comprobar que el grado de
todos y cada uno de los vrtices del grafo coincide con la dimensin, en este
caso, 5.
28 de 248
Manual de algortmica
Rejillas
Rejilla rectangular
29 de 248
Manual de algortmica
Grafo rejilla rectangular de 20 x 5.
Rejilla triangular
30 de 248
Manual de algortmica
Grafo rejilla triangular de 11 vrtices de lado.
31 de 248
Manual de algortmica
Grafos Platnicos
32 de 248
Manual de algortmica
A continuacin, se detalla un poco ms cada uno de los citados grafos.
Tetraedro
33 de 248
Manual de algortmica
Hexaedro
34 de 248
Manual de algortmica
Octaedro
35 de 248
Manual de algortmica
Icosaedro
36 de 248
Manual de algortmica
Dodecaedro
37 de 248
Manual de algortmica
Herschel
38 de 248
Manual de algortmica
Harary
39 de 248
Manual de algortmica
Grafos enlazados.
40 de 248
Manual de algortmica
Enlazados LN, R, S
Dado un grafo G, definido por un conjunto de vrtices V y un conjunto de
aristas A. Supongamos v1, ..., vn los vrtices contenidos en V. Se dice que G
es un grafo enlazado Ln, r, s si cumple que:
r s,
vi, vj V, tales que (j<r j+n=i+r) (j=r j=i+r), la arista (vi, vj) A, y
vk, vl V, tales que (l<r l+n=k+r) (l=r l=k+r), la arista (vk, vl) A
41 de 248
Manual de algortmica
Grafo de Petersen
42 de 248
Manual de algortmica
Grafo de Grtzsch.
43 de 248
Manual de algortmica
Grafo de Heawood
44 de 248
Manual de algortmica
Tutte
45 de 248
Manual de algortmica
Tipos de rutas
Camino 1: v1v3v5v2v4v3v1v2.
Camino 2: v4v2v5v3v1.
46 de 248
Manual de algortmica
Un recorrido o trayectoria es un camino donde no se repiten aristas. Un
posible ejemplo basndonos en el grafo anterior.
Recorrido 1: v4v2v5v3v1.
Recorrido 2: v5v3v1v2.
Un camino simple es un camino en el que no se repiten vrtices.
Camino simple: v4v2v5v3v1.
Un ciclo es un camino simple v0v1vn con n 3, v0 = vn y los n vrtices
son distintos. Al ciclo de longitud n lo denominaremos n-ciclo.
Ciclo: v1v3v5v2v1
Un ciclo es un camino cerrado que cumple las propiedades anteriores y
un camino simple es un camino abierto.
Un camino cerrado donde no se repiten es un circuito.
Circuito: v1v2v5v3v2v4v3v1.
Vrtices repetidos
SI
SI
SI
SI
NO
NO
Tipo ruta
Camino
Camino cerrado
Recorrido
Circuito
Camino simple
Ciclo
47 de 248
Manual de algortmica
Grafo complementario.
Grafo complementario.
48 de 248
Manual de algortmica
Ejemplo 2. (Grafo dirigido).
Grafo complementario.
49 de 248
Manual de algortmica
Grafo de lnea.
Grafo de lnea.
50 de 248
Manual de algortmica
51 de 248
Manual de algortmica
Ejemplo 2.
Grafo de lnea.
52 de 248
Manual de algortmica
53 de 248
Manual de algortmica
54 de 248
Manual de algortmica
En cada iteracin se rellena una fila, siguiendo los siguientes pasos:
1.- Buscamos los vrtices adyacentes al vrtice Vi y en la columna
correspondiente al adyacente.
Si la distancia total recorrida hasta el momento ms la distancia entre
Vi y el adyacente es menor o igual que la ya recorrida entonces
actualizamos la tupla con la nueva distancia y vrtice padre.
Es importante actualizar la tabla si la distancia es igual ya que as
conseguiremos obtener varias rutas mnimas entre el vrtice origen y destino.
2.- A continuacin tomamos como nuevo vrtice Vi, el vrtice
correspondiente a la columna cuya distancia es mnima. Una vez escogido el
vrtice cuya distancia es mnima la columna queda cerrada, es decir no vuelve
a considerarse para rellenar el resto de la tabla.
Una vez que tenemos rellenada la tabla reconstruir el camino mnimo a
partir de la misma es bastante fcil. Se ha optado por reconstruir el camino
desde el vrtice destino al vrtice origen, por lo que el primer vrtice que forma
parte del camino parcialmente construido es el vrtice destino.
Acto seguido nos situamos en la primera posicin distinta de * de la
columna correspondiente al vrtice destino comenzando por la parte inferior de
la tabla y el vrtice padre es el siguiente que forma parte del camino. La
longitud del camino viene determinada por la distancia almacenada en dicha
posicin.
Ahora nos situamos en la columna del vrtice padre y repetimos el
proceso anterior hasta llegar al vrtice origen. En ese momento tendremos el
camino mnimo completo.
Para que la exposicin
expondremos algunos ejemplos.
del
algoritmo
quede
totalmente
clara
55 de 248
Manual de algortmica
Ejemplo 1
(v2,P(v2))
(v3,P(v3))
(v4,P(v4))
(v5,P(v5))
(V6,P(v6))
(v7,P(v7))
(v8,P(v8))
Vi
(0,NP)
*
*
*
*
*
*
*
(,NP)
(2,v1)
*
*
*
*
*
*
(,NP)
(3,v1)
(3,v1)
*
*
*
*
*
(,NP)
(,NP)
(3,v2)
(3,v2)
*
*
*
*
(,NP)
(,NP)
(3,v2)
(3,v2)
(3,v2)
*
*
*
(,NP)
(,NP)
(,NP)
(,NP)
(4,v4)
(4,v5)
*
*
(,NP)
(,NP)
(,NP)
(6,v3)
(6,v3)
(6,v3)
(6,v3)
*
(,NP)
(,NP)
(,NP)
(,NP)
(,NP)
(,NP)
(8,v6)
(8,v7)
0
2
3
3
3
4
6
8
V1
V2
V3
V4
V5
V6
V7
V8
56 de 248
Manual de algortmica
57 de 248
Manual de algortmica
Ejemplo 2
(v2,P(v2))
(v3,P(v3))
(v4,P(v4))
(v5,P(v5))
Vi
(0,NP)
*
*
*
*
(,NP)
(5,v1)
(5,v1)
*
*
(,NP)
(4,v1)
*
*
*
(,NP)
(,NP)
(12,v3)
(7,v2)
(7,v5)
(,NP)
(,NP)
(6,v3)
(6,v3)
*
0
4
5
6
7
V1
V3
V2
V5
V4
58 de 248
Manual de algortmica
Ejemplo3
59 de 248
Manual de algortmica
Aplicamos el algoritmo de Dijkstra para encontrar el camino mnimo
entre el vrtice v1 y v4 obteniendo la siguiente tabla.
V1
(v2,P(v2))
(v3,P(v3))
(v4,P(v4))
(v5,P(v5))
Vi
(0,NP)
*
*
*
*
(,NP)
(1,v1)
*
*
*
(,NP)
(,NP)
(4,v2)
*
*
(,NP)
(,NP)
(,NP)
(,NP)
*
(,NP)
(,NP)
(,NP)
(,NP)
*
0
1
4
V1
V2
V3
60 de 248
Manual de algortmica
Algoritmo de Floyd.
El algoritmo de Floyd calcula el camino mnimo entre todos los pares de
vrtices del grafo ponderado y no negativo mediante tcnicas de programacin
dinmica.
Para ello calcularemos una serie de matrices Dk[i,j] que debe cumplir:
61 de 248
Manual de algortmica
fin
M [j, j] =
V1
V2
V3
V4
V1 V2 V3 V4
0 5
50 0 15 5
30 0 15
15 5 0
Primera iteracin
D1 representa el camino ms corto para ir desde vrtice i al vrtice j
pudiendo pasar nicamente por el vrtice 1.
D1 =
V1 V2 V3 V4
V1 0 5
V2 50 0 15 5
V3 30 35 0 15
V4 15 20 5 0
P[i,j] =
V1
V2
V3
V4
V1 V2 V3 V4
0 0 0 0
0 0 0 0
0 1 0 0
0 1 0 0
62 de 248
Manual de algortmica
D2 =
V1
V2
V3
V4
V1 V2 V3 V4
0 5 20 10
50 0 15 5
30 35 0 15
15 20 5 0
P[i,j] =
V1
V2
V3
V4
V1 V2 V3 V4
0 0 2 2
0 0 0 0
0 1 0 0
0 1 0 0
D3 =
V1
V2
V3
V4
V1 V2 V3 V4
0 5 20 10
45 0 15 5
30 35 0 15
15 20 5 0
P[i,j] =
V1
V2
V3
V4
V1 V2 V3 V4
0 0 2 2
3 0 0 0
0 1 0 0
0 1 0 0
D4 =
V1 V2 V3 V4
V1 0 5 15 10
V2 20 0 10 5
V3 30 35 0 15
V4 15 20 5 0
P[i,j] =
V1
V2
V3
V4
V1 V2 V3 V4
0 0 4 2
4 0 4 0
0 1 0 0
0 1 0 0
63 de 248
Manual de algortmica
Cmo se reconstruye el camino?.
Para ir desde un vrtice vi a un vrtice vj consultamos la posicin P[i,j] de la
matriz de trayectorias:
Si es 0 entonces existe camino directo para ir desde el vrtice i al j y
el camino se obtiene directamente.
En otro caso sea Vpaso = P[i,j]. Ahora visitamos la posicin P[Vpaso,j]
repitiendo el mismo proceso.
Reconstruccin del camino mnimo para ir desde el vrtice v2 al vrtice v3.
P[2,3] = 4 por lo que para ir de v2 a v3 es necesario pasar por el vrtice 4.
P[4,3] = 0 existe camino directo.
64 de 248
Manual de algortmica
Distancia mnima
distmin(v1, v2)
distmin(v1, v3)
distmin(v1, v4)
distmin(v1, v5)
65 de 248
Manual de algortmica
La excentricidad es 7.
66 de 248
Manual de algortmica
Radio de un grafo.
Veamos un ejemplo.
Distancia mnima
distmin(v1, v2)
distmin(v1, v3)
distmin(v1, v4)
distmin(v1, v5)
67 de 248
Manual de algortmica
Distancia mnima
distmin(v2, v1)
distmin(v2, v3)
distmin(v2, v4)
distmin(v2, v5)
Distancia mnima
distmin(v3, v1)
distmin(v3, v2)
distmin(v3, v4)
distmin(v3, v5)
Distancia mnima
distmin(v4, v1)
distmin(v4, v2)
distmin(v4, v3)
distmin(v4, v5)
Distancia mnima
distmin(v5, v1)
distmin(v5, v2)
distmin(v5, v3)
distmin(v5, v4)
v1 v2 v3 v4 v5
7 5 5 7 6
68 de 248
Manual de algortmica
Dimetro de un grafo.
Veamos un ejemplo:
69 de 248
Manual de algortmica
Distancia de un vrtice.
Veamos un ejemplo:
Para el grafo de la figura calcular la distancia del vrtice v1 y v5.
Distancia mnima
distmin(v1, v2)
distmin(v1, v3)
distmin(v1, v4)
distmin(v1, v5)
70 de 248
Manual de algortmica
distancia
Distancia mnima
distmin(v5, v1)
distmin(v5, v2)
distmin(v5, v3)
distmin(v5, v4)
distancia
22
Valor camino mnimo
6
3
2
1
12
71 de 248
Manual de algortmica
Algoritmo de la mediana.
Veamos un ejemplo.
Calcular la mediana en el siguiente grafo.
distancia(V1)
distancia(v2)
distancia(v3)
distancia(v4)
distancia(v5)
22
15
14
13
12
72 de 248
Manual de algortmica
En este caso la mediana del grafo esta formada por un nico vrtice.
Dicho vrtice es v5.
Veamos un ejemplo
73 de 248
Manual de algortmica
El subconjunto de vrtices de mnima excentricidad esta formado por los
vrtices v2 y v3.
74 de 248
Manual de algortmica
3.3.- Conectividad.
Algoritmo de componentes conexas.
75 de 248
Manual de algortmica
v1 v2 v3 v4 v5 v6 Mayor Menor
1 2 3 4 5 6 *
*
v1 v2 v3 v4 v5 v6 Mayor Menor
1 2 3 1 5 6 4
1
El vrtice v1 y v4 estn conectados.
Actualizada la posicin del vrtice v4.
v1 v2 v3 v4 v5 v6 Mayor Menor
1 2 3 1 2 6 5
2
76 de 248
Manual de algortmica
Vrtices de corte.
grafo.
2.- Eliminamos un vrtice del grafo.
3.- En estas condiciones se calculan el nmero de componentes
conexas. Si el nmero de componentes actuales es distinto del nmero de
componentes calculadas inicialmente ms uno, entonces se trata de un vrtice
de corte.
4.- Restauramos el vrtice borrado, as como sus aristas y repetimos el
proceso con el resto de vrtices (ir al paso 2).
Ejemplo
El grafo posee tres vrtices de corte: v3, v4, v7. Basta observar que si
eliminamos algunos de estos vrtices el grafo no es conexo.
77 de 248
Manual de algortmica
Aristas puente.
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
78 de 248
Manual de algortmica
Bloques.
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.
79 de 248
Manual de algortmica
5.- Para cada vrtice de corte y aristas de cada componente conexa.
Si G existe una arista formada por el vrtice de corte y el vrtice origen o
destino (o al contrario, es decir, el vrtice origen o destino y el vrtice de corte
en caso de ser un grafo dirigido) de una arista de la componente conexa
actualmente procesada almacenamos la arista formada por el vrtice de corte
en un conjunto S.
Una vez procesadas todas las aristas de la componente conexa actual,
aadimos todas las aristas almacenadas en S, a la componente actual,
obteniendo las aristas de uno de los bloques del grafo.
6.- Finalmente aadimos como bloques todas las aristas puente del
grafo a la vez que las restauramos en el grafo G.
PASO 1.
80 de 248
Manual de algortmica
PASO 2.
PASO 3.
81 de 248
Manual de algortmica
82 de 248
Manual de algortmica
PASO 5.
PASO 6
83 de 248
Manual de algortmica
Ejemplo para un grafo dirigido.
PASO 1.
84 de 248
Manual de algortmica
PASO 2.
PASO 3.
85 de 248
Manual de algortmica
PASO 4.
PASO 5.
86 de 248
Manual de algortmica
Segunda componente conexa {v6v7}.
Conjunto de aristas encontradas {v3v6, v3v7}.
Con el vrtice v2 no se encontr ninguna arista.
Aadimos las aristas encontradas a la lista de aristas de la
segunda componente conexa obteniendo las aristas del segundo bloque.
Bloque 2 {v6v7, v3v6, v3v7}.
PASO 6
87 de 248
Manual de algortmica
Ejemplo
88 de 248
Manual de algortmica
Aplicaremos el algoritmo de bsqueda en profundidad comenzando por
el vrtice v1
Pila
v1
v1 v2
v1 v2 v3
v1 v2 v3 v5
v1 v2 v3
v1 v2 v3 v6
v1 v2 v3 v6 v4
v1 v2 v3 v6
v1 v2 v3
v1 v2
v1
Pila vaca
Vrtices
v2
v3
v5
*
v6
v4
*
*
*
*
*
*
Aristas
v1 v2
v2 v3
v3 v5
*
v3 v6
v6 v4
*
*
*
*
*
*
Visitados
v1 v2
v1 v2 v3
v1 v2 v3 v5
v1 v2 v3 v5
v1 v2 v3 v5 v6
v1 v2 v3 v5 v6 v4
89 de 248
Manual de algortmica
90 de 248
Manual de algortmica
Aplicaremos el algoritmo de bsqueda en anchura comenzando por el
vrtice v1.
Cola
v1
v2v1
v4 v2v1
v4 v2
v4 v2
v3v4 v2
v3v4
v3
v5 v3
v5
Cola vaca
Vrtices
v2
v4
v6
*
v3
*
*
v5
*
*
*
Aristas
v1 v2
v1 v4
v1 v6
*
v2v3
*
*
v3 v5
*
*
*
Visitados
v1 v2
v1 v2 v4
v1 v2 v4 v6
v1 v2 v4 v6
v1 v2 v4 v6 v3
v1 v2 v4 v6 v3
v1 v2 v4 v6 v3
v1 v2 v4 v6 v3 v5
91 de 248
Manual de algortmica
Algoritmo de Boruvka.
92 de 248
Manual de algortmica
Paso 1
93 de 248
Manual de algortmica
Paso 2
94 de 248
Manual de algortmica
Veamos otro ejemplo.
Paso 1
95 de 248
Manual de algortmica
Paso 2
96 de 248
Manual de algortmica
97 de 248
Manual de algortmica
Algoritmo de Prim.
98 de 248
Manual de algortmica
Como vrtice de partida tomaremos el vrtice v1.
T0 = { v1}.
T1 = T0 + {v1, v6}.
T2 = T1 + {v1, v4}.
T3 = T2 + {v4, v7}.
T4 = T3 + { v4, v5}.
T5 = T4 + { v3, v5}.
T6 = T5 + { v2, v4}.
T7 = T6 + { v5, v8}.
Peso del rbol recubridor = 16.
99 de 248
Manual de algortmica
Algoritmo de Kruskal.
100 de 248
Manual de algortmica
A continuacin podemos rellenar la fila correspondiente a dicha arista
teniendo en cuenta los valores calculados en la fila anterior.
Para obtener los valores de la fila correspondientes a la arista copiamos
los valores de la fila anterior excepto cuando el valor de la fila anterior sea igual
a M en cuyo caso se machara con el valor de la componente de menor m.
Este proceso se repite hasta que terminemos con todas las aristas del
grafo.
Veamos un ejemplo:
101 de 248
Manual
de algortmica
M arista
comp(v1) comp(v2) comp(v3) comp(v4) comp(v5) comp(v6) comp(v7) comp(v8) m
1
2
3
4
5
6
7
8
* *
*
e1={v1,v6}
1
2
3
4
5
1
7
8
1 6
e1
e2={v4,v5}
1
2
3
4
4
1
7
8
4 5
e2
e3={v4,v7}
1
2
3
4
4
1
4
8
4 7
e3
e4={v1,v4}
1
2
3
1
1
1
1
8
1 4
e4
1
2
1
1
1
1
1
8
1 3
e5
e5={v3,v5}
e6={v4,v6}
1
2
1
1
1
1
1
8
* *
*
1
2
1
1
1
1
1
8
* *
*
e7={v5,v7}
e8={v2,v4}
1
1
1
1
1
1
1
8
1 2
e8
1
1
1
1
1
1
1
8
* *
*
e9={v6,v7}
e10={v5,v8}
1
1
1
1
1
1
1
1
1 8
e10
arista
102 de 248
Manual de algortmica
3.6.- Prufer
Algoritmo de codificacin.
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
103 de 248
Manual de algortmica
fmientras
fin
La bsqueda del vrtice de grado 1 (hoja) se realiza en la matriz de
adyacencias del grafo comenzando de izquierda a derecha y de arriba abajo a
partir de la fila correspondiente al vrtice v.
Una vez que se encuentra la hoja w eliminamos arista formada por los
vrtices v-w para no volver a tenerla en cuenta.
Para determinar si un vrtice es hoja sumamos la fila correspondiente a
dicho vrtice, si el valor de la suma es 1 se trata de una hoja.
v1 v2
0 1
1 0
1
1
1
1
1
v3
1
v4
v5
1
v6
v7
104 de 248
Manual de algortmica
La primera hoja encontrada es el vrtice v3 y v3-v1 es la arista que incide
en v3.
Eliminamos dicha arista y aadimos v1 a la secuencia.
S = {v1}.
v1
v2
v3
v4
v5
v6
v7
v1
0
1
v2
1
0
1
1
v3
v4
v5
1
v6
v7
105 de 248
Manual de algortmica
La primera hoja encontrada es el vrtice v4 y v4-v2 es la arista que incide
en v4.
Eliminamos dicha arista y aadimos v2 a la secuencia.
S = {v1, v2}.
v1
v2
v3
v4
v5
v6
v7
v1 v2
0 1
1 0
1
1
1
1
v3
v4
v5
1
v6
v7
106 de 248
Manual de algortmica
La primera hoja encontrada es el vrtice v5 y v5-v1 es la arista que incide
en v5.
Eliminamos dicha arista y aadimos v1 a la secuencia.
S = {v1, v2, v1}.
v1
v2
v3
v4
v5
v6
v7
v1
0
1
v2
1
0
1
1
v3
v4
v5
v6
v7
107 de 248
Manual de algortmica
La primera hoja encontrada es el vrtice v6 y v6-v2 es la arista que incide
en v6.
Eliminamos dicha arista y aadimos v2 a la secuencia.
S = {v1, v2, v1, v2}.
v1
v2
v3
v4
v5
v6
v7
v1
0
1
v2
1
0
v3
v4
v5
v6
v7
108 de 248
Manual de algortmica
La primera hoja encontrada es el vrtice v7 y v7-v2 es la arista que incide
en v7.
Eliminamos dicha arista y aadimos v2 a la secuencia.
S = {v1, v2, v1, v2, v2}.
v1
v2
v3
v4
v5
v6
v7
v1
0
1
v2
1
0
v3
v4
v5
v6
v7
109 de 248
Manual de algortmica
Algoritmo de decodificacin.
PASO 1
PASO 2
PASO 3
110 de 248
Manual de algortmica
111 de 248
Manual de algortmica
Veamos el siguiente ejemplo:
PASO 1
Sea G el grafo:
112 de 248
Manual de algortmica
PASO 2.1
Secuencia
PASO 3.1
v1-v3 y eliminamos v1 de la
113 de 248
Manual de algortmica
PASO 2.2
Secuencia
v2-v1 y eliminamos v2 de la
114 de 248
Manual de algortmica
115 de 248
Manual de algortmica
PASO 2.3
Secuencia
v4-v5 y eliminamos v4 de la
116 de 248
Manual de algortmica
PASO 2.4
Secuencia
S = {v6, v2}.
v6-v4 y eliminamos v6 de la
117 de 248
Manual de algortmica
PASO 2.5
Secuencia
S = {v2}.
Como la secuencia no est vaca formamos una arista que posee como origen
el primer vrtice de la secuencia y como destino el primer vrtice de la
diferencia entre NS y VO.
Calculamos la diferencia entre NS y VO.
NS VO = {v6, v7}.
Insertamos en G la nueva arista
secuencia.
v2-v6 y eliminamos v2 de la
118 de 248
Manual de algortmica
PASO 2.6
Secuencia
S = {}.
Vrtices no incluidos en la secuencia NS = {v1, v2, v3, v4, v5, v6, v7}.
Vrtices ocupados VO = {v1, v3, v4, v5, v6}.
PASO 3.6
Como la secuencia est vaca solo nos falta insertar una arista.
Los vrtices que forman parte de la misma se obtienen calculando la diferencia
entre NS y VO.
Calculamos la diferencia entre NS y VO.
NS VO = {v2, v7}.
Insertamos en G la nueva arista v2-v7 y FIN.
119 de 248
Manual de algortmica
120 de 248
Manual de algortmica
121 de 248
Manual de algortmica
122 de 248
Manual de algortmica
Comenzamos por el vrtice v1
formado por las aristas.
M = {v1, v6}.
A continuacin pasamos al vrtice v2. M = {v2, v8}.
123 de 248
Manual de algortmica
124 de 248
Manual de algortmica
Para el vrtice v4 = {v4, v9}.
Para el vrtice v5 = {{v5, v9}, {v4, v6}, {v1, v7}, {v2, v8}, {v3, v10}}
125 de 248
Manual de algortmica
126 de 248
Manual de algortmica
Finalmente el emparejamiento nos queda.
127 de 248
Manual de algortmica
Algoritmo de Kuhn-Munkres
PASO 1
128 de 248
Manual de algortmica
PASO 2
PASO 3
129 de 248
Manual de algortmica
PASO 4
130 de 248
Manual de algortmica
Consideremos el siguiente grafo al cual aplicaremos el algoritmo de
Kuhn-Munkres.
PASO 1
Identificamos los conjuntos U y V.
U = {u1, u2, u3, u4, u5}.
V = {v1, v2, v3, v4, v5}.
Matriz de pesos del grafo, L(vi) y L(uj)
V/U
v1
v2
v3
v4
v5
L(uj)
u1
5
0
2
2
6
0
u2
1
1
5
2
2
0
u3
1
3
4
3
0
0
u4
3
3
3
4
0
0
u5
2
4
0
4
1
0
L(vi)
5
4
5
4
6
131 de 248
Manual de algortmica
PASO 2.1
132 de 248
Manual de algortmica
PASO 3.1
133 de 248
Manual de algortmica
PASO 4.1
u1
5
0
2
2
6
u2
1
1
5
2
2
u3
1
3
4
3
0
u4
3
3
3
4
0
u5
2
4
0
4
1
L(vi)
3
4
5
4
4
134 de 248
Manual de algortmica
L(uj) 2
135 de 248
Manual de algortmica
PASO 2.2
136 de 248
Manual de algortmica
PASO 3.2
137 de 248
Manual de algortmica
PASO 4.2
u1
5
0
2
2
6
u2
1
1
5
2
2
u3
1
3
4
3
0
u4
3
3
3
4
0
u5
2
4
0
4
1
L(vi)
2
3
5
3
3
138 de 248
Manual de algortmica
L(uj) 3
139 de 248
Manual de algortmica
PASO 2.3
140 de 248
Manual de algortmica
PASO 3.3
141 de 248
Manual de algortmica
PREPROCESAMIENTO.
142 de 248
Manual de algortmica
Encontrar el emparejamiento de peso mnimo en el siguiente grafo.
Realizar el preprocesamiento.
La arista v5u1 es la que posee mayor ponderacin en el grafo. Su
peso es 6.
143 de 248
Manual de algortmica
Ahora cambiamos las ponderaciones de las aristas.
144 de 248
Manual de algortmica
Deshacemos los cambios en las ponderaciones obteniendo el peso
original de las aristas.
Aristas del emparejamiento de peso mnimo:
Arista (v1, u3, 1).
Arista (v2, u1, 0).
Arista (v3, u5, 0).
Arista (v4, u2, 2).
Arista (v5, u4, 0).
El peso del emparejamiento es 3.
145 de 248
Manual de algortmica
146 de 248
Manual de algortmica
Comenzaremos por la Clase Solucin
Clase Solucin
// Atributos
emparejamientos: Array[][] de enteros.
/// Almacena el peso del emparejamiento.
pesoEmparejamiento: real
/// Nmero de vrtices emparejados.
numVrticesEmparejados: entero
fclase
La matriz emparejamientos se inicializa con 0 excepto la diagonal
principal y posiciones en las que o existe aritas que se inicializa con infinito o
menos infinito dependiendo si el emparejamiento buscado es de peso mnimo o
mximo respectivamente.
Adems a lo largo de la ejecucin almacena las parejas encontradas a
las cuales les asignan un nmero que hace referencia al orden en el que se
han encontrado.
La profundidad al que se encuentra la solucin que viene determinada
por el nmero mximo de vrtices que pueden ser emparejados, pero
determinar esto en un grafo no es trivial, por ello en cada etapa marcamos la
fila y columna de los vrtices emparejados con el valor de la etapa para que no
vuelvan a ser considerados y saber cuando terminamos el proceso de
bsqueda de parejas. Dicho proceso finaliza cuando la matriz
emparejamientos no contiene ningn 0. Esto se comprueba en el mtodo
esSolucin.
Adems si emparejamiento buscado es de peso mnimo puede aplicarse
una poda al rbol de expansin si hemos encontrado previamente una posible
solucin. La poda de una rama se produce si el peso del emparejamiento
encontrado es menor o igual que el peso del emparejamiento parcialmente
construido. En dicho caso la rama no es examinada.
Si por el contrario el emparejamiento buscado es de peso mximo ser
necesario expandir el rbol completo, pues no es posible aplicar ninguna poda.
Por otra parte como se trata de un problema de optimizacin una
solucin se considera mejor otra, si existe un mayor nmero de vrtices
emparejados o si el nmero de vrtices emparejados es igual en ambas
soluciones se comprueba el peso y en funcin del tipo de emparejamiento se
escoge la solucin de mayor o menor peso. Esta comprobacin se realiza en el
mtodo esMejor. Cada vez que encontremos una solucin mejor
147 de 248
Manual de algortmica
actualizaremos la solucin obtenida hasta el momento, lo cual se realiza en el
mtodo actualizaSolucin.
Clase Candidatos
Clase Candidatos
// Atributos
vrticesSinPareja: Array[] de enteros;
// ndice para iterar sobre el array de candidatos.
i: entero
fila: entero
fclase
Clase Etapa
// Atributos
// Profundidad del rbol de expansin
k: entero
// Candidato actualmente procesado.
i: entero
fclase
148 de 248
Manual de algortmica
Ahora detallaremos los atributos de la clase que da cuerpo a cada uno
de los mtodos del esquema.
Clase EmparejamientoMaximalPesoOptimoBacktracking
// Atributos
// Matriz de adyacencias del grafo.
adyacencias: Array[][] de real
tipoEmparejamineto: Lgico
// Fila del vrtice sin pareja.
fila: entero
// Columna del vrtice sin pareja
columna: entero
// Almacena las soluciones parciales encontradas
sol: Solucin
// Almacena la solucin ptima encontrada.
solptima: Solucin
fclase
El atributo tipoEmparejamiento informa del tipo de emparejamiento
buscado por el usuario. Si su valor es cierto buscamos un emparejamiento de
peso mximo, en otro caso de peso mnimo.
Por ltimo comentar algunos detalles del resto de mtodos del esquema.
En el mtodo nuevaEtapa tan solo incrementamos el valor de la etapa
actual.
En quedanCandidatos se comprueba si el atributo i utilizado para
iterar sobre el array verticesSinpareja que almacena los candidatos ha
llegado al final del array.
En selecionaCandidato actualizamos los atributos fila y columna del
vrtice no emparejado. Adems se incrementa el ndice del candidato usado
para iterar sobre el array que almacena los vrtices sin pareja y asignamos
dicho valor al atributo que indica en la etapa el candidato que se esta
procesando actualmente.
En anotaSolucin se marca la fila y columna de los vrtices
emparejados con el valor -k de la etapa. Por otra parte posicin de la matriz 2
149 de 248
Manual de algortmica
emparejamientos correspondiente al emparejamiento se marca con el valor
k de la etapa indicando el orden en el que se ha encontrado la pareja.
Tambin incrementamos en dos el nmero de vrtices emparejados y
actualizamos el peso del emparejamiento parcialmente construido con el peso
de la nueva arista considerada.
Finalmente en cancelaAnotacin decrementamos el valor k y
restauramos el valor del candidato actualmente de la etapa. Adems se
restaura el valor de la fila y columna, se desmarcan la fila y columnas de los
ltimos vrtices emparejados. Tambin restauramos el valor del peso del
emparejamiento y vrtice emparejados con el valor que tenan antes de
considerar la nueva pareja. En definitiva las tpicas operaciones que deben
aparecer en toda vuelta atrs.
A continuacin veremos un par de ejemplos donde encontrar el
emparejamiento ptimo es trivial, pero son tiles para visualizar el rbol de
expansin generado. Adems a la hora de mostrar los candidatos pondremos
los propios vrtices en vez de la posicin que estos ocupan en la matriz de
adyacencias.
Emparejamiento mximo de peso mximo.
150 de 248
Manual de algortmica
rbol de expansin:
Etapa
k=0
k=1
v1
v2
v3
v4
v1
-1
-1
-1
v2
1
-1
-1
v3
-1
-1
v4
-1
-1
0
v1
v2
v3
v4
v1
0
0
0
v2
0
0
0
v3
0
0
v4
0
0
0
v1
v2
v3
v4
v1
-1
-1
-1
v2
-1
-1
0
v3
1
-1
-1
v4
-1
0
-1
{v4}
peso = 2
k=2
v1
v2
v3
v4
v1
-1
-1
-1
v2
1
-1
-1
v3
-1
-1
-2
v1
v2
v3
v4
v1
-1
-1
-1
{v4}
peso = 10
v4
-1
-1
2
v1
v2
v3
v4
peso = 5
v1
-1
-1
-1
v2
-1
-1
-2
v3
1
-1
-1
v4
-1
2
-1
peso = 14
v2
-1
0
-1
v3
-1
0
-1
{v3}
peso = 4
v1
v2
v3
v4
v1
-1
-1
-1
v2
-1
-2
-1
v3
-1
2
-1
peso = 9
v4
1
-1
-1
151 de 248
v4
1
-1
-1
Manual de algortmica
Emparejamiento mximo de peso mnimo.
rbol de expansin:
Etapa
k=0
k=1
v1
v2
v3
v4
v1
-1
-1
-1
v2
1
-1
-1
v3
-1
-1
v4
-1
-1
0
v1
v2
v3
v4
v1
0
0
0
v2
0
0
0
v3
0
0
v4
0
0
0
v1
v2
v3
v4
v1
-1
-1
-1
v2
-1
-1
0
v3
1
-1
-1
v4
-1
0
-1
{v4}
peso = 2
k=2
v1
v2
v3
v4
v1
-1
-1
-1
v2
1
-1
-1
v3
-1
-1
-2
v1
v2
v3
v4
v1
-1
-1
-1
{v4}
peso = 10
v4
-1
-1
2
peso = 5
v2
-1
0
-1
v3
-1
0
-1
{v3}
peso = 4
v1
v2
v3
v4
v1
-1
-1
-1
v2
-1
-2
-1
v3
-1
2
-1
peso = 9
v4
1
-1
-1
152 de 248
v4
1
-1
-1
Manual de algortmica
Arista (v3, v4, 3)
153 de 248
Manual de algortmica
Seguidamente un par de ejemplos para grafos con un mayor nmero de
vrtices y aritas.
Ejemplo 1.
154 de 248
Manual de algortmica
Aristas del emparejamiento ptimo de peso mnimo:
Ejemplo 2.
155 de 248
Manual de algortmica
156 de 248
Manual de algortmica
3.8.- Euler
Es euleriano ?.
Un grafo simple conexo es euleriano si y solo si todos los vrtices tienen
valencia par.
Si el grafo es dirigido y el grado de entrada y salida de cada vrtice de
es igual entonces es euleriano.
La implementacin del algoritmo hace distincin entre grafos simples y
dirigidos.
Si se trata de un grafo simple se suma las filas de la matriz de
adyacencias para cada vrtice y si todos tienen valencia par entonces el grafo
es euleriano. En caso contrario el grafo no es euleriano.
Si el grafo es dirigido se calcula el grado de entrada sumado la fila y el
grado de salida sumando la columna correspondiente al vrtice en la matriz de
adyacencias del grafo. Si el grado de entrada y salida de todos los vrtices es
igual entonces el grafo es euleriano.
157 de 248
Manual de algortmica
Vrtices grado
v1
4
v2
4
v3
4
v4
2
v5
2
v6
2
v7
2
Como todos los vrtices son de valencia par el grafo es euleriano.
Ejemplo 2.
Vrtices grado
v1
3
v2
4
v3
4
v4
2
v5
2
v6
1
158 de 248
Manual de algortmica
Como el grafo posee dos vrtices impares no es euleriano.
159 de 248
Manual de algortmica
A continuacin expondremos los ejemplos para los grafos dirigidos.
Grafos dirigidos.
Ejemplo 1
160 de 248
Manual de algortmica
Ejemplo 2
161 de 248
Manual de algortmica
Algoritmo de Fleury
162 de 248
Manual de algortmica
Vrtices Grado
v1
2
2
v2
v3
3
v4
3
v5
2
v6
2
163 de 248
Manual de algortmica
v7
v3 v1 v2
La ltima arista tomada es puente, pues no existe ninguna alternativa.
164 de 248
Manual de algortmica
165 de 248
Manual de algortmica
v3 v1 v2 v3
La ltima arista tomada es puente, pues no existe ninguna alternativa.
v3 v1 v2 v3 v4
La ltima arista tomada es puente, pues no existe ninguna alternativa.
166 de 248
Manual de algortmica
v3 v1 v2 v3 v4 v5
v3 v1 v2 v3 v4 v5 v6
La ltima arista tomada es puente, pues no existe ninguna alternativa.
167 de 248
Manual de algortmica
v3 v1 v2 v3 v4 v5 v6 v7
La ltima arista tomada es puente, pues no existe ninguna alternativa.
v3 v1 v2 v3 v4 v5 v6 v7 v4.
La ltima arista tomada es puente, pues no existe ninguna alternativa.
168 de 248
Manual de algortmica
Encontrar una trayectoria euleriana en el siguiente grafo dirigido.
169 de 248
Manual de algortmica
Los vrtices con grado de entrada distinto del grado de salida son v5 y v6.
Comenzamos por el primer vrtice impar v5.
v5 v4
v5 v4 v1
170 de 248
Manual de algortmica
v5 v4 v1 v2
v5 v4 v1 v2 v3
171 de 248
Manual de algortmica
v5 v4 v1 v2 v3 v4
La ltima arista tomada es puente, pues no existe ninguna alternativa.
172 de 248
Manual de algortmica
v5 v4 v1 v2 v3 v4 v2
La ltima arista tomada es puente, pues no existe ninguna alternativa.
173 de 248
Manual de algortmica
v5 v4 v1 v2 v3 v4 v2 v5 .
La ltima arista tomada es puente, pues no existe ninguna alternativa.
174 de 248
Manual de algortmica
Comenzamos por el primer vrtice impar v6.
v6 v1
v6 v1 v2
175 de 248
Manual de algortmica
176 de 248
Manual de algortmica
v6 v1 v2 v3
v6 v1 v2 v3 v4
La ltima arista tomada es puente, pues no existe ninguna alternativa.
177 de 248
Manual de algortmica
v6 v1 v2 v3 v4 v1
v6 v1 v2 v3 v4 v1 v5
La ltima arista tomada es puente, pues no existe ninguna alternativa.
178 de 248
Manual de algortmica
v6 v1 v2 v3 v4 v1 v5 v4
v6 v1 v2 v3 v4 v1 v5 v4 v2
179 de 248
Manual de algortmica
180 de 248
Manual de algortmica
v6 v1 v2 v3 v4 v1 v5 v4 v2 v5.
181 de 248
Manual de algortmica
Veamos un ejemplo de grafo dirigido el que solo existen dos vrtices de
grado impar pero no existe una trayectoria euleriana.
182 de 248
Manual de algortmica
Algoritmo de Tucker.
183 de 248
Manual de algortmica
Aplicaremos el algoritmo de Tucker al siguiente grafo no dirigido.
Vrtices Grado
v1
4
v2
4
v3
2
4
v4
v5
2
v6
2
v7
2
v8
2
2
v9
v10
2
v11
2
v12
2
Los vrtices cuyo grado es mayor que dos son v1, v2 y v4. Estos vrtices
sern duplicados hasta conseguir reducir el grado a dos para cada uno de
ellos.
184 de 248
Manual de algortmica
Duplicamos el vrtice v1 dando el vrtice v13.
185 de 248
Manual de algortmica
186 de 248
Manual de algortmica
Finalmente para que todos los vrtices posean grado 2 duplicamos el
vrtice v4 dando el vrtice v15.
187 de 248
Manual de algortmica
Si el grafo solo posee una componente conexa reconstruir la trayectoria
es trivial, viene determinada por el propio grafo, bastar identificar los vrtices
duplicados y al mismo tiempo actualizarlos en la trayectoria.
En este caso escogemos el vrtice duplicado v4 y el vrtice resultado de
la duplicacin v15.
Reconstruimos los dos ciclos identificando el vrtice.
Primer ciclo {v4-v7-v8-v9-v4}.
Segundo ciclo {v4-v3-v1-v2-v4}.
Identificamos el vrtice y reensamblamos los ciclos.
188 de 248
Manual de algortmica
Reconstruimos el ciclo identificando el vrtice {v2-v5-v6-v2}
189 de 248
Manual de algortmica
Identificamos el vrtice.
190 de 248
Manual de algortmica
191 de 248
Manual de algortmica
Veamos otro ejemplo
Vrtices Grado
v1
4
v2
2
v3
2
4
v4
v5
2
v6
2
Los vrtices cuyo grado es mayor que dos son v1 y v4. Estos vrtices
sern duplicados hasta conseguir reducir el grado a dos para cada uno de
ellos.
192 de 248
Manual de algortmica
Duplicamos el vrtice v1 dando el vrtice v7.
193 de 248
Manual de algortmica
Como el grafo ha sido dividido 2 componentes conexas tomamos un
vrtice de la lista de duplicados tal que el vrtice duplicado y el vrtice con el
que se identifica estn en componentes conexas distintas comenzando por las
primeras posiciones la tabla anterior. Adems en ese caso en la primera
iteracin reconstruiremos dos ciclos y los reensamblaremos por el final.
En este caso escogemos el vrtice duplicado v4 y el vrtice resultado de
la duplicacin v8.
Reconstruimos los dos ciclos identificando el vrtice.
Primer ciclo {v4-v1-v2-v3-v4}.
Segundo ciclo {v4-v5-v7-v6-v4}.
Identificamos el vrtice y reensamblamos los ciclos.
194 de 248
Manual de algortmica
Identificamos el ltimo vrtice duplicado que nos queda v1 con v7.
195 de 248
Manual de algortmica
Finalmente detallaremos un ejemplo para un grafo dirigido.
196 de 248
Manual de algortmica
Duplicamos el vrtice v1 dando el vrtice v10.
197 de 248
Manual de algortmica
Duplicamos el vrtice v5 dando el vrtice v12.
Una vez que los grados de entrada y salida de todos los vrtices son
iguales a 1 comenzamos el proceso reconstruccin de la trayectoria euleriana
cerrada e identificacin de vrtices para dejar el grafo como estaba
originalmente.
198 de 248
Manual de algortmica
Identificamos el vrtice y reensamblamos los ciclos.
199 de 248
Manual de algortmica
200 de 248
Manual de algortmica
Algoritmo de Hierholzer.
201 de 248
Manual de algortmica
202 de 248
Manual de algortmica
El primer ciclo podemos construirlo partiendo de cualquier vrtice del
grafo, por ejemplo v5.
Obtenemos el ciclo {v5-v2-v1-v3-v4-v2-v6-v5}.
A continuacin obtenemos otro ciclo partiendo de un vrtice
perteneciente al ciclo anteriormente encontrado para que sea ms fcil la
concatenacin de ambos.
Partimos del vrtice v1 y obtenemos el ciclo {v1-v10-v11-v12-v1}.
Ahora reensamblamos los ciclos:
{v5-v2-v1-v10-v11-v12-v1-v3-v4-v2-v6-v5}.
Como an no se han recorrido todas las aristas del grafo obtendremos
otro ciclo partiendo de un vrtice contenido en los ciclos concatenados con
anterioridad. Por lo que podemos partir del vrtice v4, obteniendo el ciclo
{v4-v7-v8-v9-v4}.
Ahora concatenamos los ciclos y obtenemos la trayectoria euleriana
cerrada.
{v5-v2-v1-v10-v11-v12-v1-v3-v4-v7-v8-v9-v4-v2-v6-v5}.
203 de 248
Manual de algortmica
Veamos un ejemplo para un grafo dirigido.
204 de 248
Manual de algortmica
PASO 1
Obtener los vrtices impares del grafo.
PASO 2
Formar el grafo completo kn con los vrtices impares.
La ponderacin de las aristas del grafo anterior viene determinada por la
distancia del camino mnimo en el grafo original entre cada par de vrtice del
grafo completo formado por los vrtices impares. Para obtener el peso de las
aristas se ha empleado el algoritmo de Dijkstra.
PASO 3
Buscar un emparejamiento perfecto de peso mnimo en el grafo
completo formado por los vrtices impares.
PASO 4
Duplicar las aristas del camino mnimo anteriormente calculado segn el
emparejamiento obtenido, es decir, si se obtuvo la siguiente pareja (v1, v2) se
duplican las aristas del camino mnimo que une v1 con v2 en el grafo original.
205 de 248
Manual de algortmica
PASO 5
Encontrar el recorrido cerrado de menor coste. Para ello se ha utilizado
el algoritmo de Fleury.
Vrtices Grado
v1
4
v2
4
v3
3
v4
4
v5
3
v6
1
v7
1
PASO 1
206 de 248
Manual de algortmica
PASO 2
Construimos el grafo completo formado por los vrtices v3, v5, v6 y v7.
dG (v3, v5) = 2.
dG (v3, v6) = 7.
dG (v3, v7) = 2.
dG (v5, v7) = 4.
dG (v6, v5) = 6.
dG (v6, v7) = 9.
207 de 248
Manual de algortmica
Por lo que las ponderaciones de las aritas del grafo formado por los
vrtices impares nos queda.
PASO 3
208 de 248
Manual de algortmica
Obtenemos las aristas que forman parte del camino mnimo entre v3 y v7.
Obtenemos las aristas que forman parte del camino mnimo entre v5 y v6.
209 de 248
Manual de algortmica
210 de 248
Manual de algortmica
211 de 248
Manual de algortmica
212 de 248
Manual de algortmica
vrtices v1 v2 v3 v4 v5 v6 v7
color
1 2 1 3 1 2 2
213 de 248
Manual de algortmica
214 de 248
Manual de algortmica
vrtices v1 v2 v3 v4 v5 v6 v7
color
3 1 2 2 3 1 1
215 de 248
Manual de algortmica
vrtices v1 v2 v3 v4 v5 v6 v7
color
1 3 1 2 1 2 2
216 de 248
Manual de algortmica
PASO 1
PASO 2
PASO 3
PASO 4
217 de 248
Manual de algortmica
A continuacin aplicaremos la coloracin de Brelaz al grafo anterior.
vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 0 0 0 0 0 0 0
color
- - - - - - orden
- - - - - - -
v1 v2 v3 v4 v5 v6 v7
vrtices
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 1 0 1 1 1 0 0
color
- 1 - - - - orden
- 1 - - - - -
vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 0 0
color
- 1 - 2 - - orden
- 1 - 2 - - -
218 de 248
Manual de algortmica
En los siguientes pasos volvemos a seleccionar vrtice con grado de
color mximo y si existiera ms de uno escogeramos el de mayor grado, hasta
colorear todos los vrtices del grafo. Veamos la evolucin de la tabla.
vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 0 1
color
- 1 - 2 3 - orden
- 1 - 2 3 - -
vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 0 1
color
3 1 - 2 3 - orden
4 1 - 2 3 - -
v1 v2 v3 v4 v5 v6 v7
vrtices
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 1 1
color
3 1 3 2 3 - orden
4 1 5 2 3 - -
vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 1 1
3 1 3 2 3 1 color
orden
4 1 5 2 3 6 -
vrtices
v1 v2 v3 v4 v5 v6 v7
grado g(V)
2 4 2 3 3 1 1
saturacin gs(V) 2 0 1 1 2 1 1
color
3 1 3 2 3 1 1
orden
4 1 5 2 3 6 7
219 de 248
Manual de algortmica
220 de 248
Manual de algortmica
Es bipartito?
Los grafos bipartitos kn,m, que son aquellos que admiten una particin de
sus vrtices en dos conjuntos V = XY, de manera que las aristas tienen un
extremo en cada uno de estos conjuntos (van de vrtices en X a vrtices en Y).
El conjunto X e Y constan de n y m vrtices respectivamente.
| X | = n.
| Y | = m.
Un grafo bipartito si y solo si no contiene ciclos de orden impar o su
nmero cromtico X(G) es dos. Estas dos propiedades nos permiten saber si
un grafo es bipartito.
Teorema
El algoritmo de Brelaz colorea con dos colores a los grafos bipartitos.
Por lo que tenemos un algoritmo polinmico para decidir si un grafo es
bipartito o no.
Bastar aplicar la coloracin de Brelaz al grafo. Si el nmero de colores
usados es igual a dos entonces el grafo es bipartito. En otro caso el grafo no es
bipartito.
Veamos el siguiente ejemplo.
221 de 248
Manual de algortmica
222 de 248
Manual de algortmica
Aplicamos el algoritmo de Brelaz.
223 de 248
Manual de algortmica
Aplicamos el algoritmo de Brelaz.
224 de 248
Manual de algortmica
225 de 248
Manual de algortmica
vrtices
v1
v2
v3
v4
v5
v6
v7
v8
v9
v1
0
1
2
v2
1
0
3
v3
2
3
0
v4
0
2
1
v5
3
1
2
0
4
v6
1
4
0
v7
4
0
1
v8
1
0
v9
5
226 de 248
Manual de algortmica
227 de 248
Manual de algortmica
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.
228 de 248
Manual de algortmica
229 de 248
Manual de algortmica
Calculamos un emparejamiento maximal al cual le asignamos el color 1.
Arista (v1, v2).
Arista (v3, v5).
Arista (v4, v6).
Arista (v7, v8).
Eliminamos del grafo las aristas del primer emparejamiento.
230 de 248
Manual de algortmica
Eliminamos del grafo las aristas del segundo emparejamiento.
231 de 248
Manual de algortmica
Eliminamos del grafo las aristas del tercer emparejamiento.
232 de 248
Manual de algortmica
Eliminamos del grafo la arista del cuarto emparejamiento.
233 de 248
Manual de algortmica
Eliminamos del grafo la arista del quinto emparejamiento.
234 de 248
Manual de algortmica
3.-12.- Hamilton
Un grafo conexo se dice hamiltoniano cuando admite un ciclo
hamiltoniano.
Un ciclo hamiltoniano es un ciclo que pasa por todos los vrtices del
grafo.
Un camino hamiltoniano es un camino simple que pasa por todos los
vrtices del grafo sin repetir ninguno.
Algoritmo de Dirac.
Teorema de Dirac.
235 de 248
Manual de algortmica
Un grafo G (V, A) es hamiltoniano si todos los vrtices tienen valencia
(V) n/2 donde n es el nmero de vrtices del grafo. Esta condicin es
suficiente pero no necesaria por lo que si el grafo no satisface dicha relacin no
podemos asegurar que no sea hamiltoniano.
236 de 248
Manual de algortmica
Ejemplo 1.
Vrtices
v1
v2
v3
v4
v5
v6
(V) n/2
5 6/2 = 3
3 6/2 = 3
4 6/2 = 3
4 6/2 = 3
3 6/2 = 3
3 6/2 = 3
237 de 248
Manual de algortmica
Ejemplo 2.
Vrtices
v1
v2
v3
v4
v5
v6
v7
v8
(V) n/2
6 8/2 = 4
3 8/2 = 4
4 8/2 = 4
4 8/2 = 4
3 8/2 = 4
4 8/2 = 4
2 8/2 = 4
2 8/2 = 4
238 de 248
Manual de algortmica
239 de 248
Manual de algortmica
La solucin se almacena en un array de enteros donde que almacena la
posicin del vrtice respecto a la matriz de adyacencias del grafo.
El tamao del array y la profundidad a la que se encuentra la solucin en
caso de existir vienen determinados por el nmero de vrtices del grafo.
Podemos decir que si existe la solucin se encuentra a dicha profundidad en el
rbol de expansin, en otro caso no existe solucin.
Una vez que se encuentra una solucin el se para el proceso de
bsqueda y reconstruiremos la trayectoria a partir de las posiciones del los
vrtices en la matriz de adyacencias.
Adems al no tratarse de un problema de optimizacin el mtodo
esMejor retorna siempre cierto. y actualiza solucin se deja vaco.
Clase Candidatos
Clase Candidatos
// Atributos
vrticesDestinos: Array de enteros
i: entero
fclase
240 de 248
Manual de algortmica
Clase Etapa
Clase Etapa
// Atributos
k: entero
fclase
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
241 de 248
Manual de algortmica
Etapa
k= 0
k=1
[v1, v2, -]
[v1, v3, -]
[v2, v1, -]
[v2, v3, -]
[v3, v1, -]
[v3, v2, -]
242 de 248
Manual de algortmica
k=2
{v3}
{v2}
{v3}
{v1}
[v2, v3, v1]
{v2}
[v3, v1, v2]
{v1}
[v3, v2, v1]
243 de 248
Manual de algortmica
La solucin encontrada es v1-v2-v3 si se desea el camino o v1-v2-v3 -v1 en
el caso del ciclo, el resto del rbol no seria necesario generarlo.
En cada tupla se actualiza la posicin correspondiente con la etapa en la
que nos encontramos considerando que las posiciones del array comienzan en
cero.
A continuacin expondremos otro ejemplo con su rbol de expansin
para un grafo en el que existe un camino hamiltoniano. Una vez encontrado el
camino no seguiremos expandiendo el rbol.
Etapa
[-, -, -, -] {v1, v2, v3, v4}
k=0
[v1, -, -, -,]
[v2, -, -, -] {v1}
k=1
[v1, v2, -, -] {}
k=2
k=3
[v2, v1, v3, v4]
244 de 248
Manual de algortmica
El camino hamiltoniano es v2-v1-v3-v4.
245 de 248
Manual de algortmica
Finalmente podremos un ejemplo de bsqueda de un ciclo hamiltoniano en
el que solo mostraremos la solucin.
246 de 248
Manual de algortmica
247 de 248
Manual de algortmica
4.- Bibliografa
Apuntes de la asignatura de matemtica discreta de la escuela tcnica
superior de informtica de la universidad de Sevilla
http://ma1.eii.us.es/miembros/mcruz/MD/md_ii.html.
Apuntes de la asignatura de teora de grafos de la escuela tcnica
superior de informtica de la universidad de Sevilla
http://ma1.eii.us.es/Docencia/Doc_info/XSLT.asp?xml=teorgraf.xml&xsl=progra
ma.xsl&par=esp:.
Coloracin de vrtices y aristas
http://www.dma.fi.upm.es/grafos/color03.pdf.
Apuntes sobre grafos eulerianos
http://www.google.es/search?hl=es&q=grafos+German+Combariza&btnG=B%
C3%BAsqueda&meta=.
Conectividad en grafos http://mipagina.cantv.net/jhnieto/md/Grafos.pdf.
248 de 248