You are on page 1of 32

SCC0216 - Modelagem Computacional em Grafos

Ordenao Topolgica e
Componentes Fortemente Conectados

Prof. Alneu (alneu@icmc.usp.br )


PAE: Alan (alan@icmc.usp.br)

Recapitulando
Algoritmos de Busca em Profundidade

A estratgia explorar o grafo em profundidade.

Na busca em profundidade, as arestas so exploradas a


partir do vrtice mais recentemente visitado.

Da mesma forma que a busca em largura, sempre que um


vrtice v descoberto durante a busca na lista de
adjacncia de um outro vrtice j visitado u, a DFS
memoriza este evento ao definir o predecessor de v, p[v]
como u.

Diferentemente da BFS, cujo grafo predecessor forma uma


rvore, o grafo predecessor de DFS pode ser composto
de vrias rvores.

Ordenao Topolgica

Define-se Ordenao Topolgica para Grafos


orientados acclicos.

O objetivo da ordenao topolgica alinhar


todos os vrtices de um grafo em sequncia,
de forma que se a aresta (u,v) pertence a V,
ento u est antes de v na sequncia

17

Cormen: pgina 446

Ordenao Topolgica (algoritmo)


1.

2.

3.

Chame DFS para todos os vrtices do grafo


G (isto , enquanto existirem vrtices
brancos).
A cada vrtice que terminado (isto , que
se torna preto), insira-o na cabea de uma
lista encadeada.
Retorna a lista encadeada de vrtices do
grafo produzida no passo (2)

20

Sort Topolgico
Chame DFS(G) para computar a timestamp relativo a
finalizao de um vrtice v, f[v], para cada vertice V.
Assim que o vrtice for finalizado, inser-lo na cabea
de uma lista. Retorne a lista.

Ordenao Topolgica (algoritmo)

A implementao da ordenao topolgica se d


adicionando um comando:

Insere_primeiro(u, L:lista)

Insero na cabea da lista L, na posio do algoritmo


DFS logo aps a determinao do tempo f[u] e da
finalizao do n, isto , aps o momento em que ele
se torna preto.

Obs: naturalmente Inicializa(L) precisa ser


chamada no incio do algoritmo que chama DFS
para todos os vrtices brancos.
22

Exerccio

Ordenao Topolgica Exerccio


(Ziviani 2004)

24

Componentes Fortemente Conectados

Define-se componentes fortemente


conectados para um grafo orientado.

Um Componente Fortemente Conectado (ou


Fortemente Conexo) C de um grafo G um
conjunto de vrtices maximal de G de forma
que para todos os vrtices u e v em C, u
alcanvel a partir de v e v alcanvel a
partir de u.
25

Algoritmo usando duas buscas em profundidade


Usa o transposto de G = (V,E), GT = (V,ET)
G e GT tm as mesmas componentes fortemente
conexas

original

transposto

Contrao dos componentes

Grafo acclico
dirigido

Definies

Componentes Fortemente Conectados


(algoritmo)
1.

2.

3.

4.

Chama DFS(G) para obter os tempos de trmino


f[u] para todos os vrtices de G, isto , enquanto
existirem vrtices brancos em G.
Obtm GT.
Chama DFS(GT) em ordem decrescente de f[u]
obtido no passo (1), enquanto existirem vrtices u
brancos em GT.
Retorne todas as rvores obtidas no passo (3).

29

Classificao de aresta
DFS(G) pode ser usado para classificar arestas de G.
Arestas de rvore: arestas na floresta em
profundidade. A aresta (u,v) aresta de rvore se foi
descoberta primeiro pela explorao da aresta (u,v)
Aresta de retorno: arestas (u,v) que conectam u a um
ancestral v em uma rvore de profundidade (laos
em grafos dirigidos devido aresta de retorno)
Aresta diretas: arestas (u,v) no de rvores
Arestas cruzadas: todas as outras arestas

Componentes Fortemente Conectados


(Exemplo Ziviani 2004)

(a) Grafo original


com resultado da BFs

(b) Grafo transposto


com resultado da BFs

(c) rvores encontradas

31

Exerccio
1. Encontrar os componentes fortemente
conectados. Mostre os tempos, descoberto e
trmino, para cada vrtice no grafo original e
grafo transposto. Mostrar as rvores
produzidas na execuo do DFS sobre o grafo
transposto. No procedimento DFS considere os
vrtices em ordem alfabtica.

You might also like