You are on page 1of 5

8.

Recorridos en Grafos Dirigidos


8.1 Grafos Dirigidos aciclicos
Un grafo dirigido acclico o gda es un grafo dirigido sin ciclos. Cuantificados en funcin de las relaciones que representan, los gda son mas generales que los rboles, pero menos que los grafos dirigidos arbitrarios. A continuacin se presenta un ejemplo de un rbol, un gda y un grafo dirigido con un ciclo.
A A A

Figura 8.1 Tres grafos dirigidos

Entre otros, los gda se usan para representar la estructura sintctica de expresiones aritmticas con subexpresiones comunes. Por ejemplo, la expresin: ((a+b)*c+((a+b)+e)*(e+f))*((a+b)*c) Se puede representar con el grafo dirigido:
*

e Figura 8.2 Gda para expresiones aritmticas

Los gda son tiles tambin para la representacin de rdenes parciales. Una orden parcial R en un conjunto S es una relacin binaria tal que:

1. Para toda a en S, a R a es falsa. (R es irreflexivo) 2. Para toda a,b,c en S, si a R b y b R c, entonces, a R c (R es transitivo) Dos ejemplos naturales de rdenes parciales son la relacin menor que (<) en enteros, y la relacin de subconjunto propio (). Si se tiene S={1,2,3} y P(S) el conjunto exponencial de S, es decir el conjunto de todos los subconjuntos de S. P(S)={,{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}}. es de orden parcial en P(S). Ciertamente, A A es falso para cualquier conjunto A (irreflexibilidad), y si A B y B C, entonces, A C (transitividad).
{1,2,3}

{1,2}

{1,3}

{2,3}

{1}

{2}

{3}

Fig. 8.3 Gda para inclusiones propias

8.1.1 Prueba de aciclicidad


Se tiene un grafo dirigido G=(V,A), para determinar si G es acclico, se usa la bsqueda en profundidad. Si se encuentra un arco en retroceso durante la bsqueda en profundidad de G, el grafo tiene un ciclo y viceversa. Para ver este hecho, supngase que G es cclico. Si se efecta una bsqueda en profundidad de G, habr un vrtice v que tenga el nmero de bsqueda en profundidad menor en un ciclo. Considrese un arco u v en algn ciclo que contenga a v. Ya que u est en el ciclo, debe ser un descendiente de v en el bosque abarcador en profundidad. As, u v no puede ser un arco cruzado. Puesto que el nmero en profundidad de u es mayor que el de v, u v no puede ser un arco de rbol, ni un arco de avance. As que u v debe ser un arco de retroceso.

8.1.2 Clasificacin topolgica


Un proyecto grande, suele dividirse en una coleccin de tareas mas pequeas, algunas deben realizarse en ordenes especficos. Por ejemplo, un plan curricular.

La clasificacin topolgica es un proceso de asignacin de un orden lineal a los vrtices de un gda tal que si existe un arco del vrtice i al vrtice j, i aparece antes que j en el ordenamiento lineal. A continuacin se presenta un algoritmo para la clasificacin topolgica que es una modificacin del algoritmo bpf, estableciendo una instruccin de impresin despus de la salida de cada llamado recursivo.
clasificacion_topologica: Grafo X Vrtice X Lista

Procedimiento clasificacion_topologica(G:Grafo, v:vrtice, var Marca:Lista[Booleano]) {Pre: vV, Marca tiene la informacin sobre los vrtices que ya han sido visitados en la bsqueda en profundidad.} {Post: imprime los vrtices accesibles desde el vrtice v en orden topolgico invertido} Var long,pos:entero Lst:Lista[Vrtice] Inicio Anx_Lista(Marca,v,VERDADERO) Lstsuc_grafo(G,v) Longlong_lista(lst) Pos1 Mientras pos<long+1 haga Si info_lista(Marca,i)=FALSO entonces
Clasificacion_topologica(G,info_lista(Marca,i),Marca)

Fin_si Pospos+1 Fin_mientras Escribir(info_lista(Marca,v)) Fin

8.2 Componentes fuertes


Un componente fuerte conexo de un grafo dirigido es un conjunto maximal de vrtices en el cual existe un camino que va desde cualquier vrtice del conjunto hasta cualquier otro vrtice tambin del conjunto. La bsqueda en profundidad puede usarse para determinar con eficiencia los componentes fuertemente conexos de un grafo dirigido. Sea G=(V,A) un grafo dirigido; se puede dividir V en clases de equivalencia Vi, 1ir, tales que los vrtices v y w son equivalentes si y solo si, existe un camino de v a w y otro de w a v. Sea Ai, 1 i r, el conjunto de los arcos con cabeza y cola en Vi. Los grafos Gi=(Vi,Ai) se denominan componentes fuertemente conexos de G. Un grafo dirigido con slo un componente fuerte, se dice que est fuertemente conexo.

(a)

(b)

Fig. 8.4 Grafo dirigido y sus componentes fuertes

Todo vrtice de un grafo dirigido G est en algn componente fuerte, pero ciertos arcos pueden no estarlo. Tales arcos llamados cruce de componentes, van de un vrtice de un componente de un vrtice a otro. A continuacin se presenta un algoritmo para encontrar los componentes fuertemente conexos de un grafo dirigido G dado: 1. Efectese una bsqueda en profundidad de G y numrense los vrtices en el orden de terminacin de las llamadas recursivas; esto es, asgnese un nmero al vrtice v despus del llamado recursivo. 2. Constryase un grafo dirigido nuevo Gr invirtiendo las direcciones de los arcos de G. 3. Realcese una bsqueda en profundidad en Gr , partiendo del vrtice con numeracin ms alta de acuerdo con la numeracin asignada en el paso 1. Si la bsqueda en profundidad no llega a todos los vrtices, inciese la siguiente bsqueda a partir del vrtice restante con numeracin ms alta. 4. Cada rbol del bosque abarcador resultante es un componente fuertemente conexo de G. Ejemplo: Para el grafo dirigido de la figura 8.4 (a), se parte en la bsqueda en profundidad en el vrtice a y despus del paso 1, se tiene la figura 8.5 (b).
a 4

2 1

(a)

(b)

Fig. 8.5 Grafo dirigido G y su arbol abarcador numerado (paso 1 del algoritmo)

Luego se crea el grafo Gr con los arcos en direccin contraria y se hace la bsqueda en profundidad iniciando en el vrtice de numeracin mas alta (a).

4 a

3 b

(a)

(b)

Fig. 8.6 Grafo dirigido Gr y su bosque abarcador en profundidad

Aparecen al final en la figura 8.6 (b) dos rboles del bosque abarcador en profundidad que son los componentes fuertemente conexos de G.