Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Grafos 2008-2 PDF
Grafos 2008-2 PDF
Conexión
Matlab 6.1. 6
1.2 Moverse por un grafo. Conexión
comprueba si ya están conectados o si pueden conectarse a través de v1 (es decir, si vi está conectado con
v1 y también v1 está conectado con vj ). Obtendremos ası́ una nueva matriz W1 que indicará los vértices
conectados, bien porque lo estaban o bien porque se han conectado a través de v1 .
Y se repite lo mismo para cada uno de los vértices restantes... El algoritmo, puede plantearse ası́:
Observación 15.- Matlab es un potentı́simo manejador de matrices, por lo que es mejor y más 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:
2.2 Sea G1 el grafo que se forma al eliminar del grafo G del ejercicio 2.1 de la pág. 5, los vértices 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. ¿Qué significan estas matrices? ¿Cómo
pueden usarse para probar la conexión de un grafo?
(c) Aplicar el algoritmo de Warsall dado en Algoritmo 1 de la página 7 para comprobar que es
conexo. ¿En que valor de k se obtiene ya la matriz toda de unos?
(d) Si la condición de parada es que todos los elementos de una fila o columna son uno (que no
sean de la diagonal principal), ¿para qué valores de k y j se consigue?
(e) Aplicar el algoritmo de Warsall dado en Observación 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ón 15. ¿El grafo es conexo?
[ii] Añadir una condición de parada cuando se consiga una matriz toda de unos.
[iii] Modificarlo para que la condición de parada sea una fila (o columna) toda de unos.
Matlab 6.1. 7
1.2 Moverse por un grafo. Conexión
Se trata de ir minorando los valores de la matriz realizando las mismas comprobaciones que hace Warsall,
con un pequeño cambio: en cada paso se toma como nuevo valor de la matriz de alcance
Lk (i, j) = mı́n Lk−1 (i, j) , Lk−1 (i, k) + Lk−1 (k, j)
(es decir, tomamos como longitud la del camino más 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 contendrá en cada posición la logitud del camino más corto entre cada
par de vértices (y cero en la diagonal). Si dos vértices no pueden conectarse figurará el valor ∞ (inf en
Matlab), por lo que el grafo será conexo si no existe ningún valor ∞ en la matriz final.
Definición 16.- Sea D = (V, A) un digrafo. Llamaremos trayectoria (dirigida) en D a una sucesión de
vértices, x1 x2 · · · xp−1 xp tales que (xi , xi+1 ) ∈ A, para cada i = 1, 2, . . . , p − 1.
Diremos que la trayectoria conecta o une el vértice x1 con el vértice xp , y del número 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 vértices 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 análogo para digrafos –sin más que tener en cuenta que todos los elementos han de ser
dirigidos–; todas excepto una: la definición de conexo.
Definición 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óla arista).
Matlab 6.1. 8
1.2 Moverse por un grafo. Conexión
En general, los resultados válidos para grafos o digrafos los son también para los otros, salvo aquellos
que se basan directamente en la existencia o no existencia de direcciones (como la conexión).
Ası́, el algoritmo de Floyd para calcular la menor longitud de un camino entre vértices, comentado
antes, funciona perfectamente con digrafos:
Algoritmo 2.- (de Floyd) inicio: n; L; L0 = L
para k = 1 hasta
n
Lk = min Lk−1 , Lk−1 ( : , k · v) + Lk−1 (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 vértice al otro (no hay camino entre ellos).
Nota: En un grafo no dirigido la conexión asegura que se puede ir desde cualquier vértice a cualquier otro,
pero en los digrafos conexos puede haber perfectamente vértices 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
digrafo conexo de la derecha, no hay camino dirigido de v1 a v4 ni de v4 r - r2 r - r4 r
a v1 y ocurre lo mismo entre más vértices.
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 vértice B al vértice 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
válida 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 sólo hay ceros, el
digrafo es acı́clico, ¿por qué?.
Introducir la matriz M y las trayectorias como los vectores respectivos T1 y T2.
[ii] ¿Como comprobarı́as si la trayectoria es un camino? ¿Vale el método 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.
[ii] Usar el algoritmo de Floyd para comprobar que todas las plazas están conectadas con las
demás.
[iii] Obtener la matriz resultante de cerrar la plaza B al tráfico (ver ejercicio 1.2 de pág. 3). Usar
el algoritmo de Floyd para comprobar que hay plazas no conectadas con otras.
[v] Usando el algoritmo de Floyd, elegir de entre las soluciones propuestas, aquella que permita
los recorridos de menor longitud.
Matlab 6.1. 9