You are on page 1of 9

Captulo 2

Teora de Grafos
2.1

Introducci
on: grafos y digrafos

En terminos generales, un grafo consiste en un conjunto de puntos, que llamaremos vertices, y lneas
que unen los vertices, que denominaremos aristas.
Los grafos se estan convirtiendo en herramientas poderosas de m
ultiples disciplinas: ingeniera
electrica y civil, redes de comunicacion, computacion, economia, sociologa, etc. Tanto por su simplicidad como modelo de muy variadas situaciones, como secillez para dar solucion a los problemas, en
muchos casos en forma de algoritmos computables en ordenador.
Aparecen en diferentes campos bajo denominaciones distintas: redes en ingeniera electrica,
estructuras moleculares en qumica, mapas de carreteras, sociogramas, redes de telecomunicaciones, etc. El modelado es simple tomando los objetos (lugares, aparatos, personas, . . . ) como
vertices y las conexiones (cables, relaciones, tratos, . . . ) como aristas.
Ejemplo 1.- En la ciudad de Konigsberg, existen siete puentes que unen las riberas y dos islas formadas por el ro Pregel,
de la forma que indica el dibujo. Hay alguna forma de recorrer los siete puentes y volver al punto de partida, sin cruzar
dos veces por el mismo puente?

s


$








El grafo que aparece sobre el dibujo modela esa situacion: cuatro puntos, que representan las
partes de tierra firme y las lneas que los unen, representando los puentes. El problema se reduce a
saber si pueden recorrerse todas las lneas sin repetir ninguna y acabar en el mismo punto.
Cuando se planteo esa pregunta a Euler ingenio la teora de grafos y probo los primeros resultados
antes de dar su respuesta: no.
Definici
on 2.- Un grafo esta formado por un par de conjuntos finitos, y se denota por G = (V, A),
donde V es el conjunto de v
ertices y A es el conjunto de aristas.
Cada arista de a A conecta dos vertices de V , que llamaremos extremos de la arista, y escribiremos a = {x, y} para indicar que a conecta o une los vertices x e y . Diremos entonces que x e y
son adyacentes por a.
En un grafo podemos encontrarnos lazos (aristas cuyos extremos coinciden), aristas m
ultiples (m
as
de una arista conectando los mismos vertices) y vertices aislados (no estan conectados a ning
un otro
vertice).
Pero tambien podemos hablar de grafos dirigidos donde cada arista tiene una direccion de recorrido;
modelos para una distribucion de agua por la red de tuberias de la ciudad, la red viaria con calles de
sentido u
nico, etc., son ejemplos de grafos dirigidos.
Definici
on 3.- Un digrafo o grafo dirigido esta formado por un par de conjuntos finitos, y lo
denotaremos por D = (V, A), donde V es el conjunto de v
ertices y A es el conjunto de arcos o
aristas dirigidas entre los vertices.
Cada arco a A conecta dos vertices de V , que llamaremos respectivamente extremo inicial y
extremo final del arco, y escribiremos a = (x, y) para indicar que a conecta o une el vertice x con el
vertice y . Diremos tambien que x es adyacente a y y que a incide en y .

Matlab 6.1.

21

2.1 Introduccion: grafos y digrafos

Si los grafos se representan con puntos y lneas que los unen, los digrafos se representan con puntos
y flechas entre ellos.
Desgraciadamente no hay una nomenclatura estandar para designar los tipos de grafos ni los elementos que aparecen, por lo que es preciso fijarla y tenerlo presente al consultar cualquier bibliografa
sobre el tema.
Los grafos se clasifican por ser dirigidos o no, y por tener aristas/arcos m
ultiples y lazos. De un
grafo sin aristas m
ultiples ni lazos se suele decir que es simple. Nosotros trabajaremos siempre con
grafos simples.
Notaci
on 4.- Llamaremos grafos a los no dirigidos, sin aristas m
ultiples ni lazos (grafos no dirigidos
simples), y digrafos a los dirigidos, sin arcos m
ultiples ni lazos dirigidos (grafos dirigidos simples).
Si G = (V, A) es un grafo, con V = {v1 , v2 , . . . , vn }, escribiremos {vi , vj } o {vj , vi } para denotar
la arista que une ambos vertices.
Si D = (V, A) es un digrafo, denotaremos por (vi , vj ) el arco que conecta vi con vj .
Observaciones 5.? En un grafo solo puede haber una arista entre los mismos dos vertices, y en
un digrafo puede haber hasta dos arcos pero de sentidos contrarios.
Si un grafo tiene n vertices, en cada vertice pueden incidir a lo mas n 1 aristas. Si es un
digrafo, de cada vertice pueden salir a lo mas n 1 arcos y pueden incidir en el n 1 arcos
como mucho.
? Un grafo (no dirigido) puede considerarse tambien como un digrafo, sin mas que cambiar cada
arista por dos arcos de sentidos contrarios.
t
K

En ocasiones, por comodidad y claridad en la representacion grafica, cuando en un digrafo aparece un


arco y el de sentido contrario se sustituyen ambos
por una arista.

-t


-t


=
Ut

t?

t

t?

Definici
on 6.- Un subgrafo (subdigrafo) de un grafo (digrafo), es un grafo (digrafo) formado con
vertices y aristas (arcos) del inicial.
Es decir, se obtienen eliminando aristas y/o vertices del inicial (si se elimina un vertice, tambien
deben eliminarse todas las aristas incidentes en el).

2.1.1

Matriz de adyacencia de un grafo

Un grafo o un digrafo D = (V, A) puede tambien describirse mediante una tabla o matriz que indique
las conexiones:
Definici
on 7.- Si D tiene n vertices, se llama matriz de adyacencia de D a la matriz cuadrada de
orden n, M = (mij )nn , donde mij = 1 si el arco (vi , vj ) A, y mij = 0 en otro caso.
Si G es no dirigido, su matriz de adyacencia es simetrica (si la arista {vi , vj } esta en A, tambien
esta {vj , vi }).
Si el grafo o digrafo es simple es nuestro caso, la diagonal esta formada por ceros (no tiene lazos).
v3

s
6

R s
v1

- s v4


s?
v2

v1
M = v2
v3
v4

v1
0
1
1
0

v2
0
0
0
1

v3
1
0
0
0

v4
1
0
1
0

v3

s
@
@

s v4
@

s
v1

@
@
@s
v2

0
1

M =
1
1

1
0
1
0

1
1
0
0

1
0

0
0

Fig. 2.1. Matrices de adyacencia

Matlab 6.1.

22

2.1 Introduccion: grafos y digrafos

Si para formar un subgrafo eliminamos solo aristas, su matriz de adyacencia se forma cambiando
el 1 por un 0 en las posiciones correspondientes; pero si se elimina un vertice, debemos eliminar la fila
y la columna correspondientes a ese vertice en la matriz.
En un grafo el n
umero de unos en cada fila o columna es el n
umero de aristas incidentes en el
vertice correspondiente a esa fila o columna; mientras que en un digrafo, el n
umero de unos de cada
fila se corresponde con el n
umero de arcos salientes desde ese vertice y el n
umero de unos de cada
columna indica el numero de arcos que llegan a ese vertice.
Definici
on 8.- En un grafo no dirigido, el n
umero de aristas incidentes en un vertice se denomina
grado del vertice, gr(v).
En un digrafo, se denomina ingrado de un vertice al n
umero de arcos incidentes en un vertice,
ing(v), y exgrado al n
umero de arcos salientes del vertice, exg(v).
? Si G es un grafo con n vertices y m aristas, no es dificil comprobar que

n
P

gr(vi ) = 2m.

i=1

? Si D es un digrafo con n vertices y m arcos, se tiene que

n
P

ing(vi ) =

i=1

2.1.2

n
P

exg(vi ) = m.

i=1

Ejercicios

1.1 La zona Z-72 de gestion de carreteras se ocupa de la red viaria entre las 6 ciudades del a
rea.
Hay carretera entre A y C , A y E , B y C , B y D , B y F , C y D , C y E , y entre E y D .
(a) Dibujar un grafo para modelar esta situacion.
(b) En una redistribucion zonal, la ciudad B pasa a depender de la nueva zona Z-80, y las
carreteras que la unan con las ciudades de la Z-72 pasan a depender de la Interzonal 3.
Que grafo describira la nueva situacion de la Z-72? Hay alguna peculiaridad rese
nable?
(c) Si es C , en lugar de B , quien pasa a depender de la Z-80, que grafo describira entonces
la nueva situacion de la Z-72? Hay alguna peculiaridad rese
nable?
(d) Obtener la matriz M de adyacencia del grafo inicial y las matrices M1 y M2 de los subgrafos
construidos en los apartados anteriores. Como se reflejan en las matrices las peculiaridades
observadas antes?
Introducir en el ordenador como M la matriz de adyacencia del grafo.
[i] Encuentra los vertices adyacentes a B y los adyacentes a D .
[ii] Construir a partir de ella las matrices M1 y M2 de los subgrafos obtenidos en ese ejercicio.
Hacerlo de dos formas: eligiendo los elementos que las forman y eliminando los que sobran.
[iii] Calcular el grado de cada vertice, calcular el n
umero de aristas y comprobar que es cierta
la igualdad

n
P

gr(vi ) = 2m.

i=1

1.2 La matriz M representa las direcciones de circulacion de las calles


entre 6 plazas A, B , C , D , E y F .
(a) El problema se modela usando un digrafo. Por que?
(b) Hay calles de doble direccion? cuales?
(c) Si se cierra la plaza B por obras, habra que cambiar (o
a
nadir) alguna direccion para poder seguir circulando por las
demas calles?

Matlab 6.1.

0
1

M =
0

0
0

0
0
0
1
0
0

1
0
0
0
1
0

0
0
1
0
0
1

0
0
1
0
0
0

0
0

1
0

23

2.2 Moverse por un grafo. Conexion

(d) Si la respuesta al apartado anterior es afirmativa, indicar los cambios necesarios para resolver el problema. Estudiar todas las posibilidades de solucion y resaltar las que requieran
un menor n
umero de cambios.
Introducir en el ordenador la matriz de adyacencia del digrafo como una matriz dispersa S.
[i] Construir la matriz M a partir de ella.
[ii] Hallar la traspuesta y comprobar que es distinta de M.
[iii] Implementar una bifurcacion que nos diga si una matriz es o no cuadrada, y otro que nos
diga si es simetrica.
[iv] Construir una matriz de tres columnas que por filas tenga el vertice, su ingrado y su
exgrado.
[v] Obtener la matriz M1 del digrafo resultante de cerrar la plaza B al trafico.
[vi] Si es el caso, obtener la matriz M2 que resuelva el problema del trafico.
[vii] Construir a partir de M, mediante operaciones con matrices (y no por elementos), la matriz
A correspondiente a hacer todas las calles de doble direccion.
[viii] Que operador relacional usaras para comprobar que los arcos que figuran en M siguen
estando en A?

2.2

Moverse por un grafo. Conexi


on

La estructura de un grafo, como puntos conectados, sugiere recorridos o desplazamientos por un grafo.
Es decir, en un grafo G = (V, A), podemos ir desde un vertice v1 recorriendo aristas hasta llegar a
otro vertive vk . As:
Definici
on 9.- Sea G = (V, A) un grafo. Llamaremos trayectoria en G a una sucesion de vertices,
x1 x2 xp1 xp tales que {xi , xi+1 } A, para cada i = 1, 2, . . . , p 1.
Diremos que la trayectoria conecta o une el vertice x1 y el vertice xp , y del n
umero de aristas
recorridas, p 1, diremos que es la longitud de la trayectoria.
Si x1 = xp se dice que la trayectoria es cerrada.
No hemos puesto ninguna restriccion al recorrido de la trayectoria (salvo que use aristas del grafo),
podramos deambular por el grafo recorriendo siempre las mismas aristas y pasando por los mismos
vertices. Es usual distinguir otros dos tipos de trayectorias.
Definici
on 10.- Llamaremos cola a una trayectoria que recorre aristas distintas y camino a una
trayectoria sin vertices repetidos (luego tampoco aristas).
De una cola cerrada se dice que es un circuito y de un camino cerrado que es un ciclo.
Nota: Las denominaciones de trayectoria, cola, circuito y camino difieren de unos autores a otros,
mientras que la de ciclo es mas com
un; en cualquier caso, y como ya comentamos, conviene comprobar
c
omo denomina cada autor estos elementos.
Los caminos y ciclos son elementos imprescindicles en la teora de grafos tambien en la parte que a
nosotros nos ocupa. Las siguientes definiciones establecen unas tipologas de grafos muy importantes:
Definici
on 11.- Diremos que un grafo es acclico si no tiene ciclos.
Definici
on 12.- Un grafo es conexo si todo par de vertices esta unido por una trayectoria (por un
camino).
Matlab 6.1.

24

2.2 Moverse por un grafo. Conexion

Si el grafo no es conexo, esta formado por varios trozos que s son conexos. De cada uno de estos
trozos se dice que es una componente conexa del grafo. En otras palabras, un grafo es conexo si
desde un vertice se puede ir a todos los demas. Si el grafo no es conexo un vertice solo esta conectado
con los de su misma componente conexa.
Aunque no todas las trayectorias son caminos, el siguiente resultado nos asegura que siempre
podremos disponer de uno si es necesario (y explica el parentesis en la definicion de conexion).
Proposici
on 13.- Cada trayectoria que une dos vertices distintos contiene un camino que une esos
mismos vertices.
Demostracion:
Sea T una trayectoria que une el vertice vr y el vertice vs . Si T no es un camino, repite vertices.
Cuando recorremos T , si pasamos por un vertice vi y este nos aparece mas adelante en la trayectoria,
nos encontramos en el mismo punto que la primera vez que pasamos por el, luego si eliminamos
el paseo intermedio seguimos teniendo una trayectoria que une el vertice vr y el vertice vs . Si
repetimos el proceso hasta que no queden vertices repetidos tenemos el camino postulado.
De igual manera se tiene que:
Proposici
on 14.- Cada circuito que empieza y acaba en un vertice vr contiene un ciclo que empieza
y acaba en ese vertice vr .
(El resultado es por supuesto valido para cada vertice de un circuito.)

2.2.1

Trayectorias y matrices

La matriz M , de adyacencia de un grafo, indica las aristas entre vertices, que son tambien las trayectorias de longitud 1 posibles entre vertices. As, la matriz M 2 = M M indica, en cada posici
on,
el n
umero de trayectorias de longitud 2 entre los vertices correspondientes, es decir, si en la posici
on
(i, j) hay un 3, tenemos
distintas desde el vertice vi al vertice vj .

tres trayectorias
0 1 1 1
1 0 1 0

En efecto, si M =
es la matriz de un grafo, el elemento (1, 3) de M 2 se obtiene de
1 1 0 1
1 0 1 0
operar la fila 1 de M con la columna 3 de M . Entonces (ponemos con cada elemento de la matriz su
significado como arista),


v1 v2

v1 v3

v1 v4

1

1

v1 v3

v2 v3

= 0 1+ 1 1 +1 0+ 1 1 = 2
v1 v2 v3
v1 v4 v3

6
6

v4 v3

luego hay dos trayectorias de longitud 2 desde el vertice v1 al vertice v3 : v1 v2 v3 y v1 v4 v3 .


Igualmente, el elemento (2, 2) de M 2 sera:

v2 v1

v2 v3

1
0
1
0

v1 v2
6
v3 v2

11

v2 v1 v2

+0 0+
6

11

v2 v3 v2

+0 0 = 2
6

y hay dos trayectorias de longitud 2 desde el vertice v2 al vertice v2 : v2 v1 v2 y v2 v3 v2 .


Los valores de M 2 cuentan trayectorias, no caminos. En el primer caso, las trayectorias son
caminos, pero en el otro no son caminos (ni colas) pues se recorre la misma arista. De hecho todas las
trayectorias contadas en la diagonal se forman as: se sale del vertice por cada arista y se vuelve por
la misma arista.
De la misma forma, en M 3 se tiene el n
umero de trayectorias de longitud 3 entre cada par de
4
vertices; en M se tiene el n
umero de trayectorias de longitud 4 entre cada par de vertices, etc.
Matlab 6.1.

25

2.2 Moverse por un grafo. Conexion

2.2.2

Algoritmos de conexi
on de un grafo

Usando las potencias de la matriz de adyacencia puede estudiarse la conexion de un grafo de manera
eficaz, pero poco eficiente desde el punto de vista del computo operacional. Yendo a la definici
on de
conexion (existencia de caminos entre cada par de vertices) y construyendo nuevos caminos a partir
de los ya existentes se obtienen mejores algoritmos para probarlo. El mas sencillo, y que sirve como
base a otros interesantes algoritmos es el algoritmo de Warsall.
2.2.2.1

El algoritmo de Warsall

Este algoritmo recrea la construccion de trayectorias estre vertices de la manera siguiente:


Los vertices vi y vj estan conectados si hay un camino entre ellos o, si para alg
un vertice vk hay
un camino de vi a vk y un camino de vk a vj
La estrategia que sigue el algortimo es de comprobaciones exhaustivas y lo hace en sentido contrario
al sugerido por la frase anterior: no comprueba si para cada par de vertices vi , vj hay alg
un otro vk
que hace de enlace, sino al reves, comprueba si cada vertice vk es puente entre cada par de vertices
vi y vj .
Warsall produce una sucesion de matrices booleanas W (1) , W (2) , . . . , W (n) (una por cada vertice
vk a comprobar) que indican si dos vertices dados estan o no conectados. Si el grafo es conexo la
u
ltima matriz constara toda de unos (si hay al menos dos vertices).
Inicialmente, comenzaremos usando la matriz de adyacencia M como matriz de conexion inicial
(W (0) = M , solo estan conectados los vertices extremos de las aristas). En el paso 1, y para cada vi
y vj , se comprueba si ya estan conectados o si pueden conectarse a traves de v1 (es decir, si vi est
a
conectado con v1 y tambien v1 esta conectado con vj ). Obtendremos as una nueva matriz W (1) que
indicara los vertices conectados, bien porque lo estaban o bien porque se han conectado a traves de
v1 .
Y se repite lo mismo para cada uno de los vertices restantes... El algoritmo, puede plantearse as:
Algoritmo 1.- (de Warsall)
inicio: n; M; W(0) = M
para k = 1 hasta n
para j = 1 hasta n
para i = 1 hasta n


W(k) (i, j) = W(k1) (i, j) | W(k1) (i, k) & W(k1) (k, j)
fin
fin
fin
Y el grafo sera conexo si la matriz final, W (n) , es toda de unos.
Observaci
on 15.- Matlab es un potentsimo manejador de matrices, por lo que es mejor y m
as
corto hacer algoritmos para las matrices completas que para los elementos individualmente (si se
puede claro). As, el algoritmo de Warsall puede reducirse al siguiente
inicio: n; M; W(0) = M
para k = 1 hasta n


W(k) = W(k1) |
W(k1) ( : , k) ones(1, n) & ones(n, 1) W(k1) (k, : )
fin
Como los operadores logicos sobre matrices se aplican elemento a elemento, si en un paso k, escribimos en las posiciones correspondientes de una matriz todas las comparaciones y(&) que se
hacen, vemos que puede separarse en una comparacion de dos matrices, la primera contine copias
de la columna k y la segunda copias de la fila k.
Matlab 6.1.

26

2.2 Moverse por un grafo. Conexion

Es evidente que si la matriz toda de unos se consigue en un paso intermedio no es necesario


completar el algoritmo, por lo que puede incluirse condiciones de parada que reduzcan el timepo de
c
omputo. (De hecho, es suficiente con que en una fila o columna todos los elementos que no sean de
la diagonal sean 1 para asegurar la conexion.)
2.2.2.2

Algoritmo de Floyd

El algoritmo trabaja con operaciones logicas para determinar la conexion o no entre los vertices,
pero cambiando el tipo de elementos y operadores usados se ha adaptado para otras cuestiones. Por
ejemplo, puede modificarse ligeramente para encontrar la longitud (en el sentido de menor n
umero de
aristas) del camino mas corto entre dos vertices conectados: si hay un camino entre los vertices vi y
vj y se puede formar otro uniendo dos que pasen por alg
un vertice vk , elegimos el mas corto de los
dos.
Para ello hay que sustituir la matriz de adyacencia M , por otra matriz L (de longitud de alcance)
que almacena las longitudes de los caminos entre los vertices, de la siguiente manera:
un vertice esta a alcance 0 de si mismo (0 en la diagonal),
los vertices conectados por una arista estan a alcance 1 y
los vertices no conectados directamente estan a alcance .
Se trata pues de ir minorando los valores de la matriz; para ello realizamos las mismas comprobaciones
que realiza Warsall con un peque
no cambio: en cada paso tomaremos como nuevo valor de la matriz
de alcance el valor


mn L(k1) (i, j) , L(k1) (i, k) + L(k1) (k, j)
(es decir, tomamos como longitud la del camino mas corto entre el que tenemos y el que se pueda
formar uniendo dos caminos).
La matriz final del algoritmo contendra en cada posicion la logitud del camino mas corto entre
cada par de vertices (y cero en la diagonal). Si dos vertices no pueden conectarse figurara el valor
(inf en Matlab), por lo que el grafo sera conexo si no existe ning
un valor en la matriz final.

2.2.3

Trayectorias y conexi
on en un digrafo

Para los grafos dirigidos, las trayectorias, colas, caminos, circuitos y ciclos, se definen de forma analoga.
La diferencia estriba en que los arcos solo se pueden recorrer en un sentido, por lo que las trayectorias
(colas, ciclos, etc.) son siempre trayectorias dirigidas que se recorren en el sentido que indica la flecha.
Definici
on 16.- Sea D = (V, A) un digrafo. Llamaremos trayectoria (dirigida) en D a una sucesi
on
de vertices, x1 x2 xp1 xp tales que (xi , xi+1 ) A, para cada i = 1, 2, . . . , p 1.
Diremos que la trayectoria conecta o une el vertice x1 con el vertice xp , y del n
umero de arcos
recorridos, p 1, diremos que es la longitud de la trayectoria. Si x1 = xp se dice que la trayectoria
es cerrada.
Llamaremos cola a una trayectoria con todos los arcos distintos y circuito a una cola cerrada.
Llamaremos camino a una trayectoria sin vertices repetidos y ciclo a un camino cerrado.
Todas las definiciones y resultados vistos en el apartado anterior (aciclicidad, matrices y su significado,
etc.) tienen su analogo para digrafos sin mas que tener en cuenta que todos los elementos han de ser
dirigidos, excepto uno: la definicion de conexo.
Definici
on 17.- Sea D un digrafo. Se llama grafo no dirigido subyacente a D , al grafo que se obtiene
sustituyendo cada arco (x, y) por la arista {x, y} (si aparecen (x, y) e (y, x) se sustituyen ambos por
una sola arista).
Definici
on 18.- Un digrafo es conexo si su grafo subyacente es conexo.
Matlab 6.1.

27

2.2 Moverse por un grafo. Conexion

En general, los resultados validos para grafos o digrafos los son tambien para los otros, salvo
aquellos que se basan directamente en la existencia o no existencia de direcciones (como la conexi
on).
As, el algoritmo de Floyd para calcular la menor longitud de un camino entre vertices, comentado
antes, funciona perfectamente con digrafos:
Algoritmo 2.- (de Floyd) inicio: n; L; L(0) = L
para k = 1 hasta n
para j = 1 hasta n
para i = 1 hasta n

L(k) (i, j) = min L(k1) (i, j), L(k1) (i, k) + L(k1) (k, j)
fin
fin
fin
Donde L se obtiene a partir de la matriz de adyacencia, poniendo para i 6= j sin arco entre ellos
L(i, j) = . Si en la matriz final algunas posiciones mantienen el valor , quiere decir que no puede
irse de un vertice al otro (no hay camino).
Nota: En un grafo no dirigido la conexion asegura que se puede ir desde cualquier vertice a cualquier
otro, pero en los digrafos conexos puede haber perfectamente vertices no conectados por caminos
dirigidos (que no haya camino de vi a vj ni camino de vj a vi ). En el
v1
v
v3
v
v5
s - s2
s - s4
s
digrafo de la derecha, v1 solo se conecta con v2 , v2 no se conecta con
ning
un otro, etc.

2.2.4

Ejercicios
v2
s
@

2.1 Considerar en el grafo G de la derecha, la trayectoria


de v2 a v7 , T = v2 v1 v3 v2 v5 v4 v6 v5 v3 v4 v6 v7 .
(a) Es T un camino?, y una cola? Cual es su
longitud?

@
@

v1 s
@

(b) Los caminos C1 = v2 v4 v6 v7 y C2 = v2 v5 v6 v7 ,


no forman parte de la trayectoria. Por que?

v4
s
@
@
@
@

@
@s
v3

v6
s

@
@s
v5

@
@
@s
v7

(c) Buscar en T un camino del vertice v2 al vertice v7 .


(d) Tomar los vertices del grafo y dibujar T como una lnea continua, indicando el sentido del
recorrido. Destacar el camino obtenido en el apartado anterior y las partes eliminadas.
(e) La prueba del resultado de la proposicion 13 da un metodo para encontrar un camino
contenido en una trayectoria. Reescribir el metodo en la forma de un procedimiento paso
a paso (algortmico) que permita obtener un camino contenido en una trayectoria.
(f) Obtener el n
umero de trayectorias de longitud 3 de v4 a v5 y describirlas.
Introducir en el ordenador la trayectoria como un vector T y la matriz de adyacencia M.
[i] Calcular a partir de T la longitud de la trayectoria T .
[ii] Comprobar que vertices de subndice impar se repiten en la trayectoria y, cuando ocurra,
encontrar las posiciones de las repeticiones en T.
[iii] Idear una manera de comprobar que la septima arista recorrida en T es tambien una arista
de G. Implementar esa idea en un bucle for que compruebe que T es una trayectoria
valida (que cada arista de T es un arista de G).
[iv] Programar el mismo algoritmo, pero en un bucle while.
[v] Completar los programas anteriores, para que den como repuesta Es una trayectoria o
No es una trayectoria, seg
un el caso.
Matlab 6.1.

28

2.2 Moverse por un grafo. Conexion

2.2 Sea G1 el grafo formado, eliminando del grafo G del ejercicio anterior los vertices v1 y v7 y la
arista {v2 , v4 }.
(a) Hallar su matriz de adyacencia.
(b) Aplicar el algoritmo de Warsall dado en Algoritmo 1 de la pagina 26 para comprobar que
es conexo. En que valor de k se obtiene ya la matriz toda de unos?
(c) Si la condicion de parada es que todos los elementos de una fila o columna son uno (que no
sean de la diagonal principal), para que valores de k y j se consigue?
Implementar en Matlab el algoritmo de Warsall anterior:
[i] Sin condiciones de parada.
[ii] Que a la vista de la matriz resultante, diga si el grafo es o no conexo.
[iii] A
nadiendo la condicion de parada cuando se consiga una matriz toda de unos.
[iv] Que la condicion de parada sea una fila (o columna) toda de unos.
[v] Implementarlo con operaciones matriciales, en la forma descrita en la Observacion 15.
2.3 Considerar el digrafo D del Ejercicio 1.2 dado por su matriz de adyacencia M .
(a) Si es posible, encontrar en D un camino, una cola que no sea camino y una trayectoria que
no sea cola, del vertice B al vertice D .
(b) Comprobar cual de las trayectorias T1 = B A C E C D F D F y T2 = B A C E D C F D F
es valida y obtener en ella un camino de B a F .
(c) Es un digrafo conexo?
Introducir la matriz M y las trayectorias como los vectores respectivos T1 y T2.
[i] Decidir la trayectoria valida usando el metodo construido en el Ejercicio 2.1[iii].
[ii] Construir A, la matriz del grafo no dirigido subyacente a D , y comprobar que el digrafo
es conexo usando alguno de los algoritmos de Warsall construidos anteriormente.
2.4

Consideremos M, la matriz de adyacencia del digrafo D del ejercicio anterior.


(a) Construir una matriz L (de alcance, ver los comentarios previos a Observacion 15 o
Algoritmo 2) cambiando los ceros de M por inf pero manteniendo 0 en la diagonal.
(b) Implementar en Matlab el Algoritmo 2 (de Floyd), para la matriz L. Escribirlo como
la funcion L FLOYD, con argumentos de entrada n y L y retorno una matriz W.
(c) Obtener del valor de retorno W, los vertices que estan a mayor distancia (en el sentido de
la longitud del camino mas corto) de entre los que estan conectados.
(d) Construir una funcion M FLOYD, que use como matriz de entrada la matriz de adyacencia
M del digrafo, construya la matriz de alcance L y llame a L FLOYD para obtener la matriz
de alcance minima.

2.5

Implementar como algoritmo en Matlab el proceso paso a paso del Ejercicio 2.1(e).

Pr
actica (Primera parte).- Elaborar una funcion Floyd, que mejore el algoritmo de L Floyd para
usar operaciones matriciales (en el mismo sentido que en el Ejercicio 2.2[v]). Que su entrada sea
u
nicamente la matriz de adyacencia de un grafo o digrafo y, tenga de salida 1 (conexo) o 0 (no
conexo) como primer argumento y la matriz de alcance mnimo como segundo argumento.
Matlab 6.1.

29

You might also like