You are on page 1of 3

UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS ESTRUCTURA DE DATOS Matriz de Adyacencia

Se tiene un grafo que est descrito por completo por su matriz de adyacencia, adj (es decir no hay datos asociados a los nodos y el grafo no tiene pesos). Considerar la expresin lgica adj[i][k] && adj[k][j]. Su valor es VEDADERO si y slo si los valores tanto de adj[i][k] como de adj[k][j] son VERDADERO, lo que implica que hay un arco del nodo i al k y un arco del nodo k al j. As adj[i][k] && adj[k][j] es igual a VERDADERO si y slo si hay un camino de longitud 2 de i a j que pasa por k. Considerar ahora la expresin:
(adj[i][0] && adj[0][j]) || (adj[i][1] && adj[1][j]) ||..|| (adj[i][MAXNODES-1] && adj[MAXNODES-1][j]),

donde MAXNODES=N, nmero de nodos en el grafo considerado. El valor de esta expresin es VERDADERO slo si hay un camino de longitud 2 del nodo i al nodo j ya sea a travs del nodo 0 o del nodo 1, o a travs del nodo MAXNODES-1. Esto es lo mismo que decir que la expresin adquiere el valor VERDADERO si y slo si existe algn camino de longitud 2 del nodo i al nodo j. Considerar un arreglo adj2 tal que adj2[i][j] sea el valor de la expresin anterior. adj2 se llama la matriz de camino de longitud 2. adj2[i][j] indica si hay o no un camino de longitud 2 entre i y j. Resulta que adj2 es el producto de adj consigo misma si se reemplaza la multiplicacin numrica por conjuncin (la operacin &&) y la suma por la disjuncin (la operacin || ) adj2 se llama el producto booleano de adj consigo misma. La figura describe un grafo y su matriz de adyacencia en la cual VERDADERO se representa mediante un 1 y FALSO mendiante un 0. La segunda matriz es el producto del booleano de esta matriz por s misma, y as, es la matriz de camino longitud 2 para el grafo.

C E
A B C D E

A B 0 0 0 0 0 0 0 0 0 0

C 1 1 0 0 0 adj

D E 1 0 1 0 1 0 0 1 1 0 A B C D E

A B 0 0 0 0 0 0 0 0 0 0

C 0 0 0 0 0 adj2

D E 1 1 1 1 0 1 1 1 0 1

AA D

Aparece un 1 en el rengln i , columna j de la matriz adj2 si y slo si existe un camino de longitud 2 del nodo i al j en el grafo.

De manera similar, se define adj3, como la matriz de camino de longitud 3 y se obtiene del producto booleano de adj2 con adj. En adj3[i][j] se obtiene VERDADERO si y slo hay un camino de longitud 3 de i a j. En general, para calcular la matriz de camino de longitud k, formar el producto booleano de la matriz de camino de longitud k1 con la matriz de adyacencia. Las primeras dos matrices representan adj3 y adj4 del grafo estudiado. A B A B C D E 0 0 0 0 0 0 0 0 0 0 C 0 0 0 0 0 D E 1 1 1 0 1 1 1 1 1 0 A B C D E A B 0 0 0 0 0 0 0 0 0 0 C 0 0 0 0 0 D E 1 1 1 1 0 1 1 1 0 1 A B C D E A B 0 0 0 0 0 0 0 0 0 0 C 1 1 0 0 0 D E 1 1 1 1 1 1 1 1 1 1 A B C D E A B 0 0 0 0 0 0 0 0 0 0 C 1 1 0 0 0 D E 1 1 1 1 1 1 1 1 1 1

adj3

adj4

or-y

path

Suponer que se desea saber si existe un camino de longitud 3 o menor entre dos nodos de un grafo. Si existe tal camino entre los nodos i y j, tiene que ser de longitud 1,2 3. Si hay un camino de longitud 3 o menor entre los nodos i y j el valor de (adj[i][j] || adj2[i][j] || adj3[i][j]), tiene que ser VERDADERO. La tercera matriz muestra el resultado de aplicar la funcin lgica or-y a las matrices adj, adj2 y adj3. Esta matriz contiene el valor VERDADERO (representado con 1 en la figura) en el rengln i, columna j, si y slo si hay un camino de longitud 3 o menos del nodo i al j. Suponer que queremos construir una matriz path tal que path[i][j] sea VERDADERO si y slo si existe algn camino del nodo i al j (de cualquier longitud), donde: path[i][j] = adj[i][j] || adj2[i][j] || Sin embargo, la ecuacin anterior no puede usarse para determinar path, dado que el proceso que ella describe es un poco infinito. Sin embargo, si el grafo tiene n nodos, tiene que ser cierto que: path[i][j] = adj[i][j] || adj2[i][j] || || adjn[i][j] Esto es por que si hay un camino de longitud m>n de i a j tal que i, i2,, i3, , im, j, tiene que haber otro camino de i a j de longitud menor o igual que n. Para ver esto, advirtase que como slo hay n nodos en el grafo, por lo menos un nodo k tiene que aparecer dos veces en el camino. El camino de i a j puede acortarse eliminando el ciclo de k a k. Este proceso se repite hasta que no haya dos nodos iguales en el camino (con la posible excepcin de i y j) y por lo tanto, el camino es de longitud n o menor. La cuarta matriz es path para el grafo estudiado. La matriz path se conoce con frecuencia como la cerradura transitiva de la matriz adj. Para este caso particular se ha calculado como: path = adj o adj2 o adj3 o adj4 o adj5 Se puede escribir una rutina en C que acepte una matriz de adyacencia adj y produzca su cerradura transitiva path. Esta rutina usa una rutina auxiliar prod(a,b,c) que hace el arreglo c igual al producto booleano de a y b. transclose (adj, path) int adj[][MAXNODES], path[][MAXNODES]; { int i, j, k; int newprod[MAXNODES][MAXNODES], adjprod[MAXNODES][MAXNODES]; for(i=0; i<MAXNODES; ++i) for(j=0; j<MAXNODES; ++j)adjprod[i][j]=path[i][j]=adj[i][j]; for(i=1; i<MAXNODES; ++i){ // i es el nmero de veces que adj ha sido multiplicada por s misma

// path representa todos los caminos de longitud igual o menor que i prod (adjprod, adj, newprod); for (j=0; j<MAXNODES; ++j) for (k=0; k<MAXNODES; ++k)path[j][k]=path[j][k] || newprod[j][k]; for (j=0; j<MAXNODES; ++j) for (k=0; k<MAXNODES; ++k)adjprod[j][k]=newprod[j][k]; }/* fin de for*/ }/* fin de transclose*/ La rutina prod se puede describir como sigue: prod (a, b, c) int a[][MAXNODES], b[MAXNODES], c[MAXNODES]; { int i, j, k, val; for(i=0; i<MAXNODES; ++i) /* recorrido por las filas*/ for(j=0; j<MAXNODES; ++j) /*recorrido por las columnas*/ val= FALSE; for(k=0; k<MAXNODES; ++k) val=val || (a[i][k] && b[k][j]); c[i][j]=val; } /* fin de for j*/ } /* fin de prod */ ILUSTRACIN: Trabajando siempre sobre el grafo estudiado, se realizar la multiplicacin de la primera fila de la matriz adyacente (fila del nodo A) con la ltima columna de la matriz adyacente (columna del nodo E) para encontrar los caminos de longitud 2 que posee el grafo del nodo A (origen) al nodo E (destino); es decir, se encontrar el elemento MAE de la matriz adj2 A B A B C D E 0 0 0 0 0 0 0 0 0 0 C 1 1 0 0 0 adj A B A B C D E adj2 Con la ilustracin anterior slo se ha mostrado cmo se calcula un elemento de la matriz adj 2. C D E 1 D E 1 0 1 0 1 0 0 1 1 0

Fila A (0 0 1 1 0) por Columna E (0 0 1 1 0): (0y0) || (0y0) || (1y1) || (1y1) || (0y0) = 0 || 0 || 1 || 1 || 0 = 1 Esto implica dos cosas: 1. Existen dos caminos de longitud 2 de A a E puesto que se obtienen dos unos como parte del procedimiento, el primer uno se obtiene en la tercera posicin (nodo C) y el otro en la cuarta (nodo D), entonces, los caminos son: A-C-E y A-D-E Al observar el dgrafo se concluye la veracidad de lo obtenido. 2. El elemento MAE (fila A columna E) de la adj2 es igual a 1.

You might also like