Sei sulla pagina 1di 4

1.2 Moverse por un grafo.

Conexion

1.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 posicion, el n
umero de
trayectorias de longitud 2 entre los vertices correspondientes, es decir, si en la posicion (i, j) hay un 3,
tenemos tres trayectoriasdistintas desde
el vertice vi al vertice vj .

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 vertices;
en M 4 se tiene el n
umero de trayectorias de longitud 4 entre cada par de vertices, etc.

1.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 definicion 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.
1.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 W1 , W2 , . . . , Wn (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 (W0 =
M , solo estan conectados los vertices extremos de las aristas). En el paso 1, y para cada vi y vj , se
Matlab 6.1.

1.2 Moverse por un grafo. Conexion

comprueba si ya estan conectados o si pueden conectarse a traves de v1 (es decir, si vi esta conectado con
v1 y tambien v1 esta conectado con vj ). Obtendremos as una nueva matriz W1 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; W0 = M
para k = 1 hasta n
para j = 1 hasta n
para i = 1 hasta n


Wk (i, j) = Wk1 (i, j) | Wk1 (i, k) & Wk1 (k, j)
fin
fin
fin
Y el grafo sera conexo si la matriz final, Wn , es toda de unos.
Observaci
on 15.- Matlab es un potentsimo manejador de matrices, por lo que es mejor y mas corto
hacer algoritmos para las matrices completas que para los elementos individualmente (si se puede claro).
As, el algoritmo de Warsall en Matlab se reduce a:
W = M;
n = size(W, 1);
v = ones(1, n);
for k=1 : n


W = W |
W( : , k v) & W(k v, : )
end
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 contiene copias de la columna k y
la segunda copias de la fila k.
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 tiempo de computo. (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 Sea G1 el grafo que se forma al eliminar del grafo G del ejercicio 2.1 de la pag. 5, los vertices v1
y v7 y la arista {v2 , v4 }.
(a) Hallar su matriz de adyacencia N .
(b) Contruir las matrices N , N + N 2 , N + N 2 + N 3 , etc. Que significan estas matrices? C
omo
pueden usarse para probar la conexion de un grafo?
(c) Aplicar el algoritmo de Warsall dado en Algoritmo 1 de la pagina 7 para comprobar que es
conexo. En que valor de k se obtiene ya la matriz toda de unos?
(d) 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?
(e) Aplicar el algoritmo de Warsall dado en Observaci
on 15 para comprobar que es conexo.
Obtener la matriz de adyacencia, N, a partir de la matriz M usada en el ejercicio 2.1.
[i] Implementar en Matlab el algoritmo de Warsall de Observaci
on 15. El grafo es conexo?
[ii] A
nadir una condicion de parada cuando se consiga una matriz toda de unos.
[iii] Modificarlo para que la condicion de parada sea una fila (o columna) toda de unos.

Matlab 6.1.

1.2 Moverse por un grafo. Conexion

1.2.2.2

Algoritmo de Floyd

El algoritmo de Warsall 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 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 de ir minorando los valores de la matriz realizando las mismas comprobaciones que hace Warsall,
con un peque
no cambio: en cada paso se toma como nuevo valor de la matriz de alcance
Lk (i, j) = mn

Lk1 (i, j) ,

Lk1 (i, k) + Lk1 (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 existentes). Esta variante, se denomina algoritmo de Floyd.
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.
[iv] Mediante manipulacion de las matrices, construir a partir de N su matriz de alcance L.
[v] Modificar el algoritmo de Warsall para implementar el algoritmo de Floyd.

1.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; todas excepto una: 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
s
ola arista).
Definici
on 18.- Un digrafo es conexo si su grafo subyacente es conexo.

Matlab 6.1.

1.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 conexion).
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; L0 = L
para k = 1 hasta
 n

Lk = min Lk1 , Lk1 ( : , k v) + Lk1 (k v, : )
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 entre ellos).
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
r - r2
r - r4
r
digrafo conexo de la derecha, no hay camino dirigido de v1 a v4 ni de v4
a v1 y ocurre lo mismo entre mas vertices.

1.2.4

Ejercicios

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?
(d) Las matrices M 2 , M 3 , etc. representan lo mismo que en el caso de los grafos no dirigidos,
pero referido a trayectorias dirigidas. Si en la diagonal de todas potencias solo hay ceros, el
digrafo es acclico, por que?.
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[ii].
[ii] Como comprobaras si la trayectoria es un camino? Vale el metodo usado en los no dirigidos?
[iii] Comprobar si es una cola, un ciclo o un circuito, es igual que en el caso no dirigido?
[iv] 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.


[i] Construir una matriz de alcance L, ver ejercicio 2.2[iv].
[ii] Usar el algoritmo de Floyd para comprobar que todas las plazas estan conectadas con las
demas.
[iii] Obtener la matriz resultante de cerrar la plaza B al trafico (ver ejercicio 1.2 de pag. 3). Usar
el algoritmo de Floyd para comprobar que hay plazas no conectadas con otras.
[iv] Resuelve este problema de circulacion, cambiando y/o a
nadiendo direcciones.
[v] Usando el algoritmo de Floyd, elegir de entre las soluciones propuestas, aquella que permita
los recorridos de menor longitud.

Matlab 6.1.

Potrebbero piacerti anche