5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par...

23
1 5.1. Conceptos b´ asicos Un Grafo Dirigido ´o Digrafo es un par G =(V,A), donde V es el conjunto de v´ ertices y A V × V es el conjunto de arcos. En el arco a =(v 1 ,v 2 ) A, v 1 es el extremo inicial y v 2 es el extremo final. Un arco de la forma a =(v 1 ,v 2 ) es un lazo´obuble. Sucesores del v´ ertice x+ (x)= {y V/(x, y ) A} Predecesores del v´ ertice x- (x)= {y V/(y,x) A} Adyacentes del v´ ertice x: Γ(x)=Γ + (x) Γ - (x) Un v´ ertice x es Aislado si Γ(x)= . Para U V , se define Γ(U )= uU Γ(u). Si x Γ(U )y x/ U se dice que x es adyacente a U. Una Arista es un arco sin orientaci´on. Las aristas (x,y) e (y,x) son la misma. Un Grafo No Dirigido o simplemente un Grafo es un par G =(V,E ), donde V es el conjunto de v´ ertices y E es el conjunto de aristas. Dos arcos (o dos aristas) se llaman adyacentes si tienen un v´ ertice en com´ un. Ejemplo 5.1.1 Ejemplo 5.1.2

Transcript of 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par...

Page 1: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

1

5.1. Conceptos basicos

• Un Grafo Dirigido o Digrafo es un par G = (V, A), donde V es el conjunto

de vertices y A ⊂ V × V es el conjunto de arcos.

• En el arco a = (v1, v2) ∈ A, v1 es el extremo inicial y v2 es el extremo

final. Un arco de la forma a = (v1, v2) es un lazo o buble.

• Sucesores del vertice x: Γ+(x) = {y ∈ V/(x, y) ∈ A}

• Predecesores del vertice x: Γ−(x) = {y ∈ V/(y, x) ∈ A}

• Adyacentes del vertice x: Γ(x) = Γ+(x) ∪ Γ−(x)

• Un vertice x es Aislado si Γ(x) = ∅.

• Para U ⊂ V , se define Γ(U) = ∪u∈UΓ(u). Si x ∈ Γ(U) y x /∈ U se dice que x

es adyacente a U.

• Una Arista es un arco sin orientacion. Las aristas (x,y) e (y,x) son la misma.

• Un Grafo No Dirigido o simplemente un Grafo es un par G = (V,E),

donde V es el conjunto de vertices y E es el conjunto de aristas.

• Dos arcos (o dos aristas) se llaman adyacentes si tienen un vertice en comun.

Ejemplo 5.1.1

Ejemplo 5.1.2

Page 2: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

2

5.1.1. Grado de un vertice

Para un digrafo:

• Semigrado exterior de x: d+(x) = card{a ∈ A/a = (x, y), y ∈ V }

• Semigrado interior de x: d−(x) = card{a ∈ A/a = (y, x), y ∈ V }

• Grado de x: d(x) = d+(x)+d−(x). Indica el numero de arcos en los que x es

uno de los extremos, contando cada lazo dos veces. Esto es, aristas adyacentes

al vertice.

En un grafo el grado de x (d(x)) es el numero de aristas que lo contienen,

contando cada lazo dos veces.

• Un grafo o digrafo se llama regular si d(x) = d(y),∀x, y ∈ V .

Ejemplo 5.1.3 En el digrafo de la figura 1 se tiene:

d+(2) = 2 d−(2) = 1 d(2) = 3

d+(6) = 1 d−(6) = 1 d(6) = 2

En el grafo de la figura 2 se tiene:

d(2) = 3; d(5) = 4; d(6) = 0

5.1.2. Incidencia de un conjunto

• En un digrafo se define la Incidencia de un conjunto U ⊂ V como:

w+(U) = {a ∈ A/a = (x, y), x ∈ U, y /∈ U} Arcos cuyo ext. inicial esta en U

w−(U) = {a ∈ A/a = (x, y), x /∈ U, y ∈ U} Arcos cuyo ext. final esta en U

w(U) = w+(U) ∪ w−(U)

Page 3: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

3

• En un grafo w(U) = {e ∈ E/e = (x, y)/x ∈ U o y ∈ U pero no ambos }.Esto es, aristas que contienen un unico vertice en U .

Ejemplo 5.1.4 En el digrafo de la figura 1 se tiene:

w+({2, 3}) = {(2, 4), (2, 5), (3, 4)}w−({2, 3}) = {(1, 2), (1, 3), (4, 3)}

w({2, 3}) = {(2, 4), (2, 5), (3, 4), (1, 2), (1, 3), (4, 3)}

En el grafo de la figura 2 se tiene:

w({1, 2, 5}) = {(2, 3), (4, 5)}

5.1.3. Multigrafos

• Un Multidigrafo (multigrafo) es un digrafo (grafo) en el que hay un par

de vertices a, b ∈ V (a 6= b) tales que existen dos o mas arcos (aristas)

(a, b) ({a, b}). Esto es un multidigrafo es un digrafo con al menos un arco

repetido.

• La multiplicidad de un arco (arista) es el numero de veces que aparece

dicho arco (arista) en el multidigrafo (multigrafo).

• Para p ∈ ZZ+ un p–digrafo (p–grafo) es un multidigrafo (multigrafo) en

el cual ningun arco (arista) tiene multiplicidad mayor que p y algun arco

(arista) tiene multiplicidad p.

• Un grafo G = (V,E) se llama simple si no tiene lazos y no existen dos aristas

con los mismos extremos, es decir, no tiene lazos y es un 1–grafo.

Page 4: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

4

• Un grafo G = (V,E) se le llama completo si ∀x 6= y (x, y) ∈ E. Esto es

todo par de vertices esta unido por una arista.

• Un digrafo G = (V,A) se llama completo si (x, y) /∈ A −→ (y, x) ∈ A.

• Un clique o ciclado es un grafo simple y completo. Se denota por Kn, siendo

n = card(V ).

Ejemplo 5.1.5

5.1.4. Subgrafos. Grafo Complementario

• Dado un subconjunto de vertices U ⊂ V , se llama subgrafo generado por

U al digrafo (grafo) GU = (U,AU) (GU = (U,EU)) donde

AU = {a ∈ A/a = (x, y), x, y ∈ U}EU = {e ∈ E/e = (x, y), x, y ∈ U}

• Dado un subconjunto de arcos B ⊂ A (F ⊂ E) se llama grafo parcial

generado por B (F) al digrafo (grafo) GB = (V, B) (GF = (V, F )).

• Dado un subconjunto de vertices V ′ ⊂ V y un subconjunto de arcos A′ ⊂ A

(aristas E ′ ⊂ E) se dice que G′ = (V ′, A′) (G′ = (V ′, E ′)) es un subgrafo

parcial de G si V ′ ⊂ V, A′ ⊂ A (E ′ ⊂ E) y los vertices de cada arco (arista)

de A’ (E’), estan en V’.

• Sea G = (V, E) un grafo sin bucles y con n vertices. El grafo complemen-

tario de G, que se denota por G, es el subgrafo de Kn con los n vertices de

G y todas las aristas que no estan en G.

Ejemplo 5.1.6

Page 5: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

5

5.1.5. Representacion matricial de los grafos

• En un grafo se dice que la arista (a,b) es incidente a los vertices a y b.

• En un digrafo se dice que el arco (a,b) es incidente desde a y es incidente

a b.

• Matriz de incidencia de un grafo

B = (bik), i = 1, 2, ...n; k = 1, 2, ..., m

donde

bik =

1 si el nodo i pertenece a la arista ek

0 en otro caso

• Matriz de incidencia de un digrafo

B = (bik), i = 1, 2, ...n; k = 1, 2, ..., m

donde

bik =

+1 si el arco k termina en el nodo i

−1 si el arco k sale del nodo i

0 en otro caso

Observacion En algunos libros, o en determinados contextos, se intercam-

bian el ”+1τ el 1”.

• Matriz de adyacencia de un grafo y de un digrafo

A = (aij), i = 1, 2, ...n; j = 1, 2, ..., n

donde

aij =

1 si existe un arco o arista entre los nodos i y j

0 en otro caso

Page 6: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

6

Ejemplo 5.1.7

5.1.6. Cadenas, Ciclos, Caminos y Circuitos

• En un digrafo, una cadena de longitud q es una sucesion de q arcos µ =

{a1, a2, ..., aq} tal que ai 6= ai+1 ∀i ∈ {1, 2, .., q − 1} y el arco ai tiene

un extremo comun con el arco ai+1 y otro extremo comun con el arco ai−1

∀i ∈ {2, 3, ..., q − 1}.

• El extemo i de a1 que no es adyacente a a2 es el extremo inicial de la cadena

y el extremo j de aq que no es adyacente a aq−1 es el extremo final de la

cadena. Se dice que este cadena une los vertices i y j.

• Una cadena se llama elemental si al recorrer sus vertices no se repite ninguno

o, equivalentemente, si todos sus vertices son de grado no mayor que 2.

• Una cadena se llama simple si no repite ningun arco. Toda cadena elemental

es simple pero no al reves.

• Un ciclo es una cadena simple cuyos extremos inicial y final coinciden.

• Un pseudo–ciclo es una cadena en la que el vertice inicial y final coinciden

(se pueden repetir arcos).

• En un digrafo, un camino es una cadena en la que todos los arcos tienen el

mismo sentido, es decir, el extremo final de ai coincide con el extremo inicial

de ai+1∀i ∈ {1, 2, .., q − 1}

Page 7: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

7

• Camino Elemental es un camino que es una cadena elemental.

• Camino Simple es un camino que es una cadena simple.

En un 1–digrafo un camino queda determinado por el orden de sucesion de

sus vertices. Si µ = {(v1, v2), (v2, v3), ..., (vq, vq+1)} tambien puede ponerse

µ = [v1, v2, ..., vq+1].

• Un Circuito es un ciclo y un camino a la vez.

• Un circuito elemental es un circuito cuyos vertices tienen todos grado 2.

En un grafo los conceptos cadena y camino son equivalentes y, ası mismo ciclo

y circuito. Preferentemente, se hablara de cadenas y ciclos.

5.1.7. Conexion en Grafos

• Un grafo o digrafo se llama conexo si ∀u, v ∈ V existe una cadena {u, ..., v}que los une.

• Un digrafo se llama fuertemente conexo si ∀u, v ∈ V existe un camino

{u, ..., v} que los une.

• Dado un grafo G = (V,E) se define la relacion uRv ←→ existe una cadena

que une u y v. Por definicion, uRu.

• La relacion R es de equivalencia y define una particion en V. V/R es el

conjunto de componentes conexas de G.

Se llama numero de conectividad del grafo al card(V/R).

Si card(V/R) = 1 el grafo es conexo.

Page 8: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

8

• Dado un digrafo G = (V, A) se definen las relaciones

uR1v ←→ existe una cadena entre u y v

uR2v ←→ existe un camino entre u y v, y otro entre v y u.

Las relaciones R1 y R2 son de equivalencia y definen particiones en V.

V/R1 es el conjunto de componentes conexas de G.

V/R2 es el conjunto de componentes fuertemente conexas de G.

Se llama numero de conectividad fuerte del digrafo al card(V/R2).

Si car(V/R2) = 1 el digrafo es fuertemente conexo.

• Sea G = (V, E) un grafo conexo y U ⊂ V . Se dice que U es un conjunto de

articulacion si el subgrafo de G generado por V - U es no conexo.

Ejemplo 5.1.8

Ejemplo 5.1.9 Articulacion

En un grafo conexo G, una arista e = (u, v) forma parte de un ciclo si y solo si su

eliminacion no desconecta G.

Page 9: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

9

5.2. Arboles

Un arbol es un grafo conexo sin ciclos.

Un arbol es un grafo crıtico en el sentido de tener el maximo numero de aristas

sin formar ciclos y el mınimo numero de aristas siendo conexo.

Un bosque es un grafo sin ciclos, es decir, es un grafo cuyas componentes

conexas son arboles.

5.2.1. Teorema de Caracterizacion

Las cuatro condiciones siguientes son equivalentes:

(a) G = (V, E) es un arbol.

(b) G no tiene ciclos y si se le anade una arista se crea un unico ciclo.

(c) ∀u, v ∈ V, u 6= v, ∃ un unico µ camino simple que une u y v.

(d) G es conexo y si se le quita cualquier arista deja de serlo.

Sea G = (V, E) un grafo finito con n = |V |. Las tres condiciones siguientes son

equivalentes:

(a) G es un arbol

(b) G tiene n− 1 aristas y no posee ciclos.

(c) G tiene n− 1 aristas y es conexo.

Page 10: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

10

5.2.2. Arbol generador y arbol generador mınimo

Un problema que se puede plantear es el siguiente:

Dado un grafo G = (V, E) conexo, encontrar un grafo parcial minimal (en el

sentido de la inclusion) que sea conexo.

Al ser este grafo parcial minimal un grafo que sustenta la conectividad del grafo

original, se denomina arbol generador o arbol soporte.

Arbol generador mınimo (Minimum Spanning Tree)

Sea G1 un grafo parcial del grafo G. Se dice que G1 es un arbol generador de

G si es un arbol y contiene todos los vertices de G.

Otras terminologıas son: arbol soporte, arbol de expansion.

Sea G = (V, E) un grafo. G es conexo si y solo si posee un arbol generador.

Teorema de Cayley

El numero de arboles generadores del clique Kn es nn−2.

Sea G un grafo conexo en el que cada arista tiene asignado un peso w(e). Un

arbol generador mınimo es un arbol generador con menor suma de los pesos

de sus aristas.

No tiene por que ser unico, lo sera si ∀u, v ∈ V es w(u) 6= w(v).

Sea G = (V,E) un grafo conexo. Sea P ⊂ V y e una arista de longitud mınima

entre las aristas que tienen un extremo en P y el otro en V - P. Entonces existe

un arbol generador mınimo que contiene a la arista e.

Hemos visto que el problema del arbol generador mınimo podrıa ser el siguiente:

Dado un grafo G = (V,E) y unos pesos asignados a sus aristas w(e), e ∈ E,

determinar el arbol generador (V, T ), T ⊂ E tal que se minimiza el peso total

w(T ) =∑

e∈T

w(e)

Page 11: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

11

Considerando que hay que elegir un subconjunto de aristas, las variables a con-

siderar son variables binarias xe ∈ {0, 1} ∀e ∈ E.

Las restricciones son:

• Un arbol generador tiene n-1 aristas

e∈E

xe = n− 1

• Todos los vertices son incidentes a alguna arista del arbol

e∈w(i)xe ≥ 1 ∀i ∈ V

• La funcion objetivo debe minimizar la suma de los pesos de las variables

Min∑

e∈E

w(e) xe

Esta formulacion es insuficiente al no garantizar que las aristas seleccionadas esten

conectadas. La restriccion que asegura la conectividad es algo mas compleja y

provoca que el modelo de programacion sea muy ineficiente al crecer el numero

de restricciones exponencialmente con el numero de vertices del grafo:

∀V1 ⊂ V / V1 6= ∅, V − V1 6= ∅ ∑

e∈w(V1)xe ≥ 1

5.2.3. Algoritmo de Kruskal

Sea el grafo G = (V, E) con pesos en las aristas w(e) (e = arista). Sea n = |V |.El algoritmo construye el arbol generador partiendo de T = ∅ y va anadiendo

aristas mientras no formen ciclo. Si el grafo de partida G = (V, E) es conexo y las

aristas estan ordenadas crecientemente por sus pesos cuando se haya completado

la lista, el arbol generador construido por el algoritmo es el de mınimo peso.

Page 12: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

12

Este tipo de algoritmos que construyen la solucion incorporando en cada etapa

lo mejor se denominan algoritmos voraces (greedy).

Idea basica del algoritmo de Kruskal: Elegir en cada iteracion la arista de menor

peso que no forma ciclo con las ya elegidas.

ALGORITMO DE KRUSKAL: (1956)

PASO 1

Poner T = ∅.

PASO 2

Mientras |T | < n− 1 y E 6= ∅ hacer:

encontrar la arista de menor peso e ∈ E

poner E = E − {e}

si T ∪ {e} no tine ciclos poner T = T ∪ {e}.

PASO 3

Parar. Si |T | < n− 1 entonces G no es conexo. Si |T | = n− 1 entonces (V, T )

es un arbol generador mınimo.

Ejemplo 5.2.1

5.2.4. Algoritmo de Prim

Idea basica del algoritmo de Prim: Elegir en cada iteracion la arista de menor

peso que una un vertice ya seleccionado con un vertice aun no seleccionado.

ALGORITMO DE PRIM: (1957)

PASO 1

Tomar v1 ∈ V . Poner P = {v1}, N = V − {v1}, T = ∅, i = 1

Page 13: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

13

PASO 2

Buscar e∗ = (x∗, y∗), x∗ ∈ P, y∗ ∈ N tal que w(e∗) = min{w(e)/e =

(x, y), x ∈ P, y ∈ N}.

Si w(e∗) = ∞ parar: G no es conexo.

Si w(e∗) < ∞ poner P = P ∪ {y∗}, N = N − {y∗}, T = T ∪ {e∗}

PASO 3

Si i < n− 1 poner i = i + 1, ir al Paso 1.

Si i = n− 1 parar: (V, T ) es un arbol generador mınimo.

Ejemplo 5.2.2

Page 14: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

14

5.3. Problemas de camino mınimo

El problema se plantea en grafos dirigidos o grafos mixtos. Formalmente el

problema del camino mınimo es el siguiente:

Dado un grafo G = (X,A) con uno costes asignados a sus arcos cij = c(xi, xj)

que representan el coste del arco (xi, xj) ∈ A, y fijados una vertices s, t ∈ X,

determinar el camino µ[s, t] con coste total o longitud total mınima.

El coste o la longitud de una camino es la suma de los costes o las longitudes

de los arcos que lo componen c(µ) =∑

(xi,xj)∈µ

cij Por tanto dado un digrafo o grafo

mixto G = (X, A), pueden plantearse los siguientes problemas:

1. Dos dos vertices fijos s, t ∈ X determinar el camino mınimo que va desde s

a t.

2. Dado un vertice fijo s ∈ X encontrar los caminos mınimos que partiendo

desde s llegan a cualquier vertice xi ∀xi ∈ X.

3. Encontrar los caminos mınimos desde cualquier par de vertices de un grafo.

4. Sean s y t vertices fijos, encontrar k caminos mınimos de s a t. En este

caso no solo se determina un camino mınimo, sino el segundo y el tercero y

ası sucesivamente. Este problema es muy interesante por si acaso falla uno

de los caminos ir a otro. A veces se intenta minimizar el coste, teniendo en

cuanta ciertas condiciones subjetivas.

5. Encontar los caminos mınimos de maxima precision o maxima capacidad

entre dos vertices fijos s y t de un grafo.

Page 15: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

15

5.3.1. Camino mınimo entre s y t

Nuestro objetivo sera encontrar el camino ψ tal que

C(ψ) = mın {C(ψ) / ψ es un camino de s a t},

siendo C(ψ) =∑

(xi,xj) ∈ ψ cij.

Algoritmo de Dijkstra (1959)

Este algoritmo permite calcular el camino mınimo entre s y t cuando los costes

son positivos, cij ≥ 0. El metodo se basa en la asignacion temporal de marcas a

los vertices en cada iteracion.

Sea l(xi) la marca o etiqueta sobre el vertice xi.

PASO 1: Colocar l(s) = 0 y considerar la marca como permanente. Poner

l(xi) = ∞ ∀ xi 6= s y considerar las marcas temporales y poner p = s.

PASO 2: ∀ xi ∈ Γ(p) y que tienen marcas temporales, cambiar dichas marcas

por l(xi) = mın[l(xi), l(p) + c(p, xi)].

PASO 3: De todos los vertices marcados temporales, encontrar el vertice x∗i

para el cual l(x∗i ) = mın[l(xi)].

PASO 4: Considerar la marca x∗i permanente y poner p = x∗i .

PASO 5:

i).- Si solo se desea el camino de s a t.

- Si p = t; l(p) es la longitud del camino mınimo requerido. Parar.

- Si p 6= t; Ir al PASO 2.

Page 16: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

16

Si se requieren todos los caminos mınimos de s a cualquier otro vertice del

grafo.

- Si todos los vertices tienen marcas permanentes entonces las marcas

son las longitudes de los caminos mınimos. Parar.

- Si algunas marcas son temporales entonces ir al PASO 2.

La salida del algoritmo es la longitud del camino mınimo, luego con un proceso

de vuelta atras basandonos en las etiquetas de los vertices encontramos el camino

mınimo.

marca costo marca

vertice + arista = vertice

anterior anterior-final final

l(xi) + c(xi, xj) = l(xj)

5.3.2. Caminos mınimos con costes generales

El algoritmo anterior es tan solo valido para costos positivos, si fueran neg-

ativos, el algoritmo no detectarıa si existe un circuito con costes negativos, el cual

nos conducirıa a un bucle del que no podamos salir, no existiendo solucion para

el problema. Veamos un algoritmo para determinar caminos mınimos cuando los

arcos tienen costes generales (positivos o negativos).

Algoritmo de Ford (1946)

Sean s el vertice inicial y lk(xi) la marca o etiqueta sobre xi al final de la k +1-

esima iteracion.

PASO 1: Colocar S = Γ(s); k = 1; l1(s) = 0; l1(xi) = c(s, xi),

∀xi ∈ Γ(s), y l1(xi) = ∞ para el resto.

Page 17: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

17

PASO 2: ∀ xi ∈ Γ(S), (xi 6= s) actualizar la marca de acuerdo con

lk+1(xi) = mın{lk(xi), mınxj∈Ti

{lk(xj) + c(xj, xi)}

donde Ti = Γ−1(xi)⋂

S (conjunto de vertices cuyos caminos mınimos desde

s son de cardinalidad k)

Para aquellos xi /∈ Γ(S) entonces lk+1(xi) = lk(xi).

Nota 1: El conjunto de Ti contiene aquellos vertices para los cuales los

caminos mınimos actuales desde s son de cardinalidad k (esto es, los vertices

del conjunto S) y los vertices para los cuales existe un arco al vertice xi.

Nota 2: Si xi /∈ Γ(S) el camino mınimo que va desde s hasta xi no podra ser

de cardinalidad k + 1 y por ello no sera necesario cambiar la marca de xi.

PASO 3: a).- Si k ≤ n− 1 y lk+1(xi) = lk(xi) ∀ xi, entonces se ha obtenido

la solucion optima y las marcas son las longitudes de los caminos mınimos

que van desde s al resto de los vertices del grafo. Parar.

b).- Si k < n− 1 y lk+1(xi) 6= lk(xi) para algun xi entonces ir al PASO 4.

c).- Si k = n−1 y lk+1(xi) 6= lk(xi) para algun xi entonces existe un circuito

φ de costo negativo en el grafo. Parar. El problema no tiene solucion.

PASO 4: Cambiar el conjunto S de la siguiente forma:

S = {xi / lk+1(xi) 6= lk(xi)}.

Ahora el conjunto S contiene todos los vertices cuyos caminos mınimos desde

s son de cardinalidad k + 1.

PASO 5: Colocar k = k + 1 e ir al PASO 2.

Page 18: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

18

La solucion que da el algoritmo, al igual que el de Dijkstra, no son los caminos

mınimos, sino las longitudes de tales caminos. Teniendo en cuenta la relacion

l(xi) = l(p) + c(p, xi) obtenemos el vertice anterior y repitiendo el proceso

hacia atras hasta llegar a s se obtiene el camino mınimo.

Page 19: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

19

Algoritmo de Floyd (caminos mınimos entre cada par de vertices).

Sea el grafo dirigido G = (V, E), aij : longitud del arco (i, j), aii = 0, aij = ∞si no existe el arco (i, j).

Paso 0: Poner D0(i, j) = aij ∀i, j; P (i, j) = i, ∀i, j; k = 0.

Paso 1: ∀i, j ∈ {1, 2, ..., n}

Si Dk(i, j) > Dk(i, k + 1) + Dk(k + 1, j) poner

P (i, j) = P (k + 1, j), Dk+1(i, j) = Dk(i, k + 1) + Dk(k + 1, j)

ir al Paso 2.

En caso contrario Dk+1(i, j) = Dk(i, j).

Paso 2: Poner k = k + 1.

Si k = n parar;

Si k < n ir al paso 1.

Nota.-

Dk(i, j) es la distancia mınima de i a j pasando solo por los vertices 1,2,...,k

P (i, j) es el vertice anterior a j en el camino mınimo de i a j (en la etapa k

pasando solo por los vertices 1,2,...,k).

Page 20: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

20

5.4. Recorridos en grafos. Recorridos eulerianos.

En el siglo XVIII la ciudad de Knigsberg estaba dividida en cuatro zonas por el

rio Pregel. Estas zonas estaban conectadas por siete puentes. Los habitantes de la

ciudad intentaban buscar un recorrido desde un punto inicial dado que atravesara

exactamente una vez cada puente y regresara al punto inicial.

Euler represento el problema mediante un grafo y demostro que tal recorrido

no existe.

Sea G = (V, E) un grafo o multigrafo. Se dice que G tiene un ciclo euleriano

si existe un ciclo en G que pasa por todos los vertices y atraviesa una vez cada

arista.

Una cadena euleriana es una cadena que pasa por todos los vertices y atraviesa

exactamente una vez cada arista. (Euler 1966) Sea G = (V,E) un grafo o

multigrafo. Entonces G tiene un ciclo euleriano si y solo si G es conexo y el

grado de cada vertice es par. En el problema de los puentes de Knigsberg es

d(a) = d(c) = d(d) = 3, d(b) = 5.

Sea G = (V, E) un grafo o multigrafo. G tiene una cadena euleriana si y solo

si G es conexo y tiene a lo sumo dos vertices de grado impar. Sea G = (V,E)

un grafo o multigrafo conexo. El numero I de vertices de grado impar es par.

G tiene ciclo euleriano si y solo si I = 0

G tiene cadena euleriana si y solo si I = 2

Si I > 2, E se puede particionar en I/2 cadenas eulerianas. Ademas cada una

de estas cadenas tiene por extremos dos vertices de grado impar.

Page 21: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

21

Sea G = (V,E) un grafo o multigrafo conexo, aij = numero de aristas (i, j) y

A = (aij), entonces es posible determinar un ciclo euleriano.

ALGORITMO para ciclo euleriano:

PASO 1

Calcular si =n∑

j=1aij ∀i ∈ {1, 2, ..., n}. Si algun si es impar no hay ciclo

euleriano, parar. Si todos los si son pares, poner p = 0, ir al paso 2.

PASO 2

Poner p = p + 1. Buscar una fila k no nula de A. Poner i = k, Cp = {k}, ir

al paso 3.

PASO 3

Buscar m tal que aim > 0; poner Cp = Cp ∪ {m}, aim = aim − 1, ami =

ami − 1 i = m. Si i = k ir al paso 4; si i 6= k repetir el paso 3.

PASO 4

Si ∃ aij > 0 ir al paso 2. Si aij = 0 ∀i, j, ir al paso 5.

PASO 5

Union de subciclos. Buscar dos ciclos Ci, Cj con un vertice comun v. Quitar

v de Ci y poner Cj en su lugar. Borrar el subciclo Cj. Repetir el paso 4 hasta

que solo quede un ciclo.

Nota: Si hay lazos (i, i) se insertaran en el ciclo euleriano final al pasar por el

vertice i.

Page 22: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

22

5.5. Recorridos en grafos. Recorridos hamiltonianos.

El origen se debe a Hamilton en 1859 en que planteo el problema de recorrer

los vertices de un dodecaedro pesando exactamente una vez por cada uno de sus

vertices.

Si G = (V, E) es un grafo, digrafo, multigrafo o multidigrafo se dice que G

tiene un ciclo (circuito) hamiltoniano si tiene un ciclo (circuito) que pasa por

cada vertice exactamente una vez.

Una cadena (camino) hamiltoniana es una cadena (camino) que pasa por cada

vertice una vez.

Sea G = (V, E) un grafo sin bubles con n = |V |. Si d(x)+d(y) ≥ n−1, ∀x, y ∈V, x 6= y entonces G tiene una cadena hamiltoniana Sea G = (V, E) un grafo

sin bucles con n = |V |. Si d(x) ≥ n− 1

2, ∀x ∈ V entonces G tiene una cadena

hamiltoniana.

El teorema anterior es una condicion suficiente pero no necesaria.

Ejemplo 5.5.1

Tiene un ciclo hamiltoniano

Todo grafo completo tiene un ciclo hamiltoniano. Sea G = (V, E) un grafo sin

bucles y sea δ = mınx∈V d(x). Si δ >n

2entonces G tiene un ciclo hamiltoniano.

Page 23: 5.1. Conceptos b¶asicos · 1 5.1. Conceptos b¶asicos † Un Grafo Dirigido o¶ Digrafo es un par G = (V;A), donde V es el conjunto de v¶ertices y A ‰ V £V es el conjunto de

23

5.5.1. Caminos y circuitos hamiltonianos

Sea G = (V,E) un digrafo conexo.

ALGORITMO para circuito hamiltoniano:

PASO 1

Construir las matrices alfanumericas M1 y M como sigue:

si existe el arco (i,j) poner M(i, j) = ”j”, M1(i, j) = ”ij”.

si no existe el arco (i,j) poner M(i, j) = M1(i, j) = ”0”.

poner M(i, j) =