Anda di halaman 1dari 22

CMP 4131

Estrutura de Dados II
Captulo 4 - Grafos e Algoritmos Bsicos
Clarimar Jos Coelho - CMP/UCG
(ltima Modicao: Fevereiro 2006

Sumrio
4 Grafos e Algoritmos

49

4.1

Origem da Teoria dos Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

49

4.2

Evoluo Terica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

4.3

Grafos Direcionados ou Digrafos . . . . . . . . . . . . . . . . . . . . . . . . . . .

51

4.4

Terminologia 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51

4.5

Caminho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

53

4.6

Mais Terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

53

4.7

Grafos Acclicos Direcionados . . . . . . . . . . . . . . . . . . . . . . . . . . . .

54

4.8

Grafos no Direcionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

55

4.9

Terminolgia 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

4.10 Grafos Valorados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

4.11 Representao de Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

57

4.11.1 Matriz de Adjacncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

57

4.11.2 Matriz Esparsa Matriz Densa . . . . . . . . . . . . . . . . . . . . . . .

59

4.11.3 Lista de Adjacncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

4.12 Implementando Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

60

4.13 Representao de Grafo - Comparaes . . . . . . . . . . . . . . . . . . . . . . .

61

4.13.1 Camparao do Espao . . . . . . . . . . . . . . . . . . . . . . . . . . . .

61

4.13.2 Comparao do Tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . .

62

4.14 Busca em Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

4.14.1 Busca em Profundidade . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

4.14.2 Busca em Largura

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

4.14.3 Ordenao Topolgica . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

4.15 Primeira N2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

65

II

Lista de Figuras
4.1

Pontes sobre rio Pregel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

49

4.2

Modelo matemtico para o problema das pontes de Knigsberg. . . . . . . . . .

50

4.3

Grafo G1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52

4.4

Grafos direcionados acclicos.

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

54

4.5

Grafo no direcionado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

55

4.6

Grafos valorados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

4.7

Lista de adjacncia para o grafo G1 da Figura 4.3. . . . . . . . . . . . . . . . . .

59

4.8

Lista de adjacncia para o grafo G4 da Figura 4.5. . . . . . . . . . . . . . . . . .

60

4.9

Grafo direcionado acclico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

64

4.10 Grafo com distncias entre cidades do estado de Gois, Braslia e Minas Gerais.

III

65

Lista de Tabelas
4.1

Conjuntos de arestas de sada e incidentes para o grafo G1 . . . . . . . . . . . . .

53

4.2

Comparao das representaes de grafo. . . . . . . . . . . . . . . . . . . . . . .

63

IV

Captulo 4
Grafos e Algoritmos
Grafos so modelos naturais usados para representar relacionamentos arbitrrios entre
dados e objetos. Relacionamentos arbitrrios entre dados e objetos aparecem com freqncia
em cincia da computao, engenharia e muitas outras disciplinas. O estudo de grafos numa
disciplina bsica como estrutra de dados importante.

4.1 Origem da Teoria dos Grafos


A teoria dos grafos surgiu de um problema algortimico: o problema da ponte de
Knigsberg, resolvido por Euler em 1736. Na cidade de Knigsberg (hoje Kaliningrado) na
Rssia.

Figura 4.1. Pontes sobre rio Pregel.

Existem duas ilhas sobre o rio Pregel com um total de 7 pontes interligando as regies
49

50
(Figura 4.1). O problema consiste em partindo de uma dessas regies, determinar um trajeto
pelas pontes segundo o qual se possa retornar regio de partida, aps atravessar cada ponte
somente uma vez.
Euler mostrou que no existe tal trajeto utilizando um modelo em grafos para uma
generalizao deste problema. Atravs do modelo mostrado na Figura 4.2, Euler provou que
existe o desejado trajeto quando e somente quando em cada regio concorrer um nmero par
de pontes.

Figura 4.2. Modelo matemtico para o problema das pontes de Knigsberg.

Esta soluo considerada o primeiro teorema em teoria dos grafos.

4.2 Evoluo Terica


Meados do sculo XIX, trs desenvolvimentos isolados despertaram o interesse pela
rea.
1. Formulao do problema das 4 cores (De Morgan 1852)
Qual a quantidade mnima de cores para colorir um mapa de tal forma que pases fronteirios possuam cores diferentes? Apresenta-se um exemplo em que 3 cores no so
sucientes. Uma prova de que 5 cores suciente foi formulada. Conjecturou-se ento
que 4 cores seriam sucientes. Esta questo cou em aberto at 1976 quando Appel e
Haken provaram para 4 cores. Curiosidade: Supe-se que a autoria do problema seja de
Francis Guthrie. Este, em 1852, o teria proposto a seu irmo Frederick, ento estudante,
que por sua vez o comunicou a De Morgan.
2. Problema do ciclo Hamiltoniano (Hamilton 1859)

51
Existem n cidades. Cada par de cidades pode ser adjacente ou no arbitrariamente.
Partindo de uma cidade qualquer, o problema consiste em determinar um trajeto que
passe exatamente uma vez em cada cidade e retorne ao ponto de partida.
3. Teoria das rvores, Kircho (1847)
4. Problemas de circuitos eltricos, Cayley (1857), Qumica Orgnica.
No existe uma maneira nica de se representar (desenhar) um grafo. Um diagrama
meramente ressalta a relao de incidncia entre vrtices e arestas. As arestas podem interceptar
em um ponto que no vrtice.

4.3 Grafos Direcionados ou Digrafos


Denio 4.3.1 Grafo direcionado ou digrafo o par ordenado G(V, E) com as seguintes
propriedades:
1. O primeiro componente V , um conjunto nito, no vazio.
2. O segundo componente E , um conjunto nito de pares ordenados de vrtices, E V V .
Os elementos de E so chamados de arestas de G.

Exemplo 4.3.1 Considere o grafo direcionado G1 = (V1 , E1 ) com 4 os vrtices e seis arestas
V1 = {a, b, c, d}
E1 = {(a, b), (a, c), (b, c), (c, a), (c, d), (d, d)}.
O grafo G1 pode ser representado gracamente como mostra a Figrua 4.3. Os pares
que representam uma aresta so ordenados, as arestas (a, c) e (c, a) so distintas. E1 um
conjunto matemtico e no pode conter mais que uma instncia de uma dada aresta. A aresta

(d, d) conecta um n a ele mesmo.

4.4 Terminologia 1
Cada elemento de V chamado vrtice ou n de G. Logo, V o conjunto de vrtices ou
ns de G.

52

Figura 4.3. Grafo G1 .

Uma aresta (v, w) E pode ser representada como v w. A seta que sai de v para w
conhecida como arco direcionado. O vrtice w chamado cabea do arco porque ele se
encontra na cabea da seta. O vrtice v chamado cauda do arco. O vrtice w dito ser
adjacente ao vrtice v .

A aresta e = (v, w) sai do vrtice v . A notao A(v) usada para denotar o conjunto de
arestas que saem do vrtice v , isto ,

A(v) = {(v0 , v1 ) E : v0 = v}.


O grau de sada de um n o nmero de arestas que saem deste n. Logo, o grau de
sada de v |A(v)|.

O vrtice e = (v, w) dito ser incidente sobre o vrtice w. A notao I(w) usada para
denotar o conjunto de arestas incidentes sobre o vrtice w, isto ,

I(w) = {(v0 , v1 ) E : v1 = w}.


O grau de entrada de um n o nmero de arestas incidentes no n. Logo, o grau de
entrada de w |I(w)|. Por exemplo, a Tabela 4.2 mostra os conjuntos de sada e incidentes
dos vrtices e o grau de entrada e sada para cada vrtice do grafo G1 mostrado na Figura
4.3.

53
Tabela 4.1. Conjuntos de arestas de sada e incidentes para o grafo G1 .

Vrtice

A(v)

Grau de sada

I(v)

Grau de entrada

{(a, b), (a, c)}

{(a, c)}

{b, c)}

{(a, b)}

{(a, c), (c, d)}

{(a, c), (b, c)}

{(d, d)}

{(c, d), (d, d)}

4.5 Caminho
Denio 4.5.1 Um caminho em um grafo direcionado G = (V, E) uma seqncia no vazia
de vrtices:

P = {v1 , v2 , . . . , vk },
onde vi V para 1 i k , tal que (vi , vi+1 ) E para 1 i k .
O comprimento do caminho P k 1. Entre os caminhos do grafo G1 existe o caminho
de comprimento zero {a}, o caminho de comprimento um, {b, c}, o caminho de comprimento
dois, {a, b, c}, e assim por diante.
O

grafo

G1

gera

um

nmero

innito

{a, c, a, c, a, c, a, c, a, c, a, c, a} um caminho de G1 .

de

caminhos.

Considere

que

Observe tambm o distino entre o

caminho zero, {d} e o caminho de comprimento um, {d, d}.

4.6 Mais Terminologia


Considere o caminho P = {v1 , v2 , . . . , vk } em um grafo direcionado G = (V, E).

O vrtice vi+1 o sucessor do vrtice vi para 1 i < k . Cada elemento vi para o caminho
P (exceto o o ltimo) tem um sucessor;
O vrtice vi1 o predecessor de vi para 1 < i k . Cada elemento vi do caminho P
(exceto o primeiro) tem um predecessor.

Um caminho P chamado de caminho simples se e somente se vi 6= vj para todo i e j tal


quue 1 i < j < k . Todovia, permitido que v1 seja o mesmo que vk em um caminho
simples.

54

Um ciclo um caminho P de comprimento diferente de zero em que v1 = vk . O comprimento de um ciclo exatamento o comprimento do caminho P .

Um loop um ciclo de comprimento um. Isto , ele um caminho da forma {v, v}.
Um ciclo simples um caminho que ambos um ciclo e um caminho simples.
Referindo novamente ao grafo G1 da Figura 4.3, o caminho {a, b, c, d} um caminho simples
de comprimento trs. O caminho {c, a, c, d} tambm tem comprimento trs mais no simples
porque o vrtice c ocorre duas vezes na seqncia, no no m. O grafo contm o caminho

{a, b, c, a} que um ciclo de comprimento trs. O caminho {a, c, a, c, a} um ciclo de comprimento quatro.

4.7 Grafos Acclicos Direcionados


Para certas aplicaes conveniente lidar com grafos que no contm ciclos. Por
exemplo, a rvore um tipo especial de grafo que no comtm ciclos.

Denio 4.7.1 Grafo direicionado que no contm ciclos.


Todas as rvores so grafos acclicos direcionados. Todavia, nem todo grafo acclico
direcionado so rvores. Por exemplo, considere os grafos direcionados, G2 e G3 , acclicos
mostrados na Figura 4.4. G2 uma rvore mas G3 no .

G2

G3

b
d

c
e

i
g

j
k

Figura 4.4. Grafos direcionados acclicos.

55

4.8 Grafos no Direcionados


Em um grafo no direcionado os vrtices so conectados por arcos no direcionados.
Arcos no direcionados uma aresta que no tem seta. Ambas as extremidades de um arco
no direcionado so equivalentes, no existe cabea ou cauda. Logo, a aresta de um grafo no
direcionado representada como um conjunto envs de pares ordenados.

Denio 4.8.1 Grafo no direcionado um par ordenado G = (V, E) com as seguintes


propriedades:
1. O primeiro componente, V , um conjunto nito no vazio. Os elementos de V so
chamados de vrtices de G;
2. O segundo componente, E , um conjunto de conjuntos. Cada elemento de E um
conjunto compreendido de exatamente dois (distintos) vrtices. Os elementos de E so
chamados de arestas de G.

Exemplo 4.8.1 Considere o grafo no direcionado G4 = (V4 , E4 ) com quatro vrtices e quatro
arestas:

V4 = {a, b, c, d}
E4 = {{a, b}, {a, c}, {b, c}, {c, d}}
O grafo G4 pode ser representado gracamente como mostra a Figura 4.5.

Figura 4.5. Grafo no direcionado.

Observe que, devido as arestas em um grafo no direcionado ser um conjunto, {a, b}

{b, a}, e E4 tambm um conjunto, ele no pode conter mais que uma instncia de uma dada

56
aresta. Outra conseqncia da denio que um vrtice no pode ter uma aresta para ele
mesmo em um grafo no direcionado porque as arestas um conjunto de tamanho dois e um
conjunto no pode conter duplicatas.

4.9 Terminolgia 2
Considere o grafo no direcionado G = (V, E) dado pela Denio 4.

Uma aresta {v, w} E sai e incide sobre os vrtices v e w;


O conjunto de arestas que saem do vrtice v o conjunto A(v) = {(v0 , v1 ) E : v0 =
v v1 = v}. O conjunto de arestas incidentes sobre o vrtice w I(w) A(w).

4.10 Grafos Valorados


Aplicao prtica requer anotao adicional em grafos. Tal informao pode ser colocada nas arestas ou vrtices. Um grafo com informao adicional chamado de grafo valorado
ou rotulado. A Figura 4.6 mostra dois exemplos de grafos valorados.

G5

31

83

G6

Grfo direcionado com vrtices valorados

88

59

41
c

31

26

Grafo no direcionado com arestas valoradas

Figura 4.6. Grafos valorados.

Por exemplo, o grafo direcionado com vrtices rotulados/valorados tal como o grafo

G5 da Figura 4.6 pode ser usado para representar uma mquina de estado nito. Cada vrtice
corresponde a um estado da mquina e cada aresta corresponde a um estado de transio
permitido.
O grafo no direcionado com arestas valoradas tal como G6 na Figura 4.6 pode ser
usado para representar informao geogrca. Os vrtices do grafo representa localizaes e as

57
arestas representam possveis rotas entre as localizaes. Nesse grafo o rtulo usado sobre
cada aresta para representar a distncia entre dois pontos.

4.11 Representao de Grafos


Considere o grafo direcionado G = (V, E). Com E V V , o grafo G contm mais
2

de |V |2 arestas. Existem 2|V | conjuntos possveis de arestas para um dado conjunto de vrtices

V . Logo, a principal preocupao quando projetar a representao de um grafo encontrar


uma maneira apropriada de representar o conjunto de arestas.

4.11.1 Matriz de Adjacncia


Considere o grafo direcionado G = (V, E) com n vrtices, v = {v1 , v2 , . . . , vn }. O
esquema de representao usa uma matriz A n n de zeros e uns dado por

1 (v , v ) E;
i j
Ai,j =
0 caso contrrio.
isto , o (i, j)simo elemento da matriz, ser um se vi vj for uma aresta em G. A matriz

A chamada matriz de adjacncia. Por exemplo, a matriz de adjacncia par o grafo G1 da


Figura 4.3

0 1

0 0
A1 =

1 0

0 0

1 0

1 0

0 1

0 1

O nmero de uns na matriz de adjacncia igual ao nmero de arestas no grafo. A


vantagem de usar uma matriz de adjacncia que fcil determinar o conjunto de arestas que
saem e incidem em um vrtice. Considere o vrtice vi . Cada um na isima linha corresponde
a uma aresta que sai do vrtice vi . Cada um na isima coluna corresponde a uma aresta
incidente no vrtice vi .
Nesse caso, existem duas vezes mais uns na matriz de adjacncia do que arestas no
grafo no direcionado.
Matriz de adjacncia pode ser usada tambm para representar grafos no direcionados.
Um grafo G = (V, E) no direcionado representado com com n vrtices, usando uma matriz

58
A n n de zeros e uns dada por

Ai,j

1 {v , v } E;
i j
=
0 caso contrrio.

Os dois conjuntos {vi , vj } e {vj , vi } so equivalentes, a matriz A simtrica em relao


a diagonal. Isto , Ai,j = Aj,i . Logo, todos as entradas na diagonal so zeros: Ai,i = 0 para

1 i n. Por exemplo, a matriz de adjacncia para

0 1 1

1 0 1
A4 =

1 1 0

0 0 1

o grafo G4 da Figura 4.5

Nesse caso, existem duas vezes mais uns na matriz de adjacncia que arestas no grafo
no direcionado.
Uma simples variao permite usar a matriz de adjacncia para representar um grafo
valorado. Por exemplo, dado um rtulo numrico, pode-se representar um grafo (direcionado
ou no direcionado) usando uma matriz A n n onde o rtulo numrico associado a aresta

(vi , vj ), no caso do grafo direcionado, e a aresta {vi , vj }, no caso de um grafo no direcionado.


Por exemplo, a matriz de adjacncia para o grafo

31

31
A6 =

41 59

G6 da Figura 4.6

41

59

26

26

Nesse caso, as entradas correspondentes a arestas no existentes so representadas


por . Aqui serve como um tipo de sentinela. O valor usado como sentinela depende da
aplicao. Por exemplo, se a aresta representa rotas entre localizaes geogrcas, ento o
comprimento representa um valor maior que todos que existem.
A matriz de adjacncia tem |V |2 entradas, a quantidade de espaos necessrios para
representar as arestas de um grafo O(|V |2 ), independente do nmero atual de arestas no
grafo. Seo grafo contm relativmamente poucas arestas, isto , se |E| |V 2 |, ento a maioria
dos elementos da matriz de adjacncia dever ser zero (ou ). A matriz que a maioria dos
elementos so zero (ou ) uma matriz esparsa.

59

4.11.2 Matriz Esparsa Matriz Densa


Informalmente, um grafo com poucas arestas esparso e um grafo com muitas arestas
denso.

Denio 4.11.2.1 Grafo esparso um grafo G = (V, E) onde |E| = (|V |).
Exemplo 4.11.2.1 Considere o grafo G = (V, E) com n ns. Suponha que o grau de sada de
cada vrtice em G seja a constante xa k . O grafo G um grafo esparso porque |E| = k|V | =

O(|V |). Um grafo que no esparso dito denso.

Denio 4.11.2.2 Um grafo denso um grafo G = (V, E) onde |E| = (|V |2 ).


Exemplo 4.11.2.2 Considere o grafo G = (V, E) com n vrtices. Suponha que o grau de sada
do vrtice em G seja uma funo f de n, 0 < f 1. Se n = 16 e f = 0.25, o grau de sada de
cada n 4. O grafo G um grafo denso porque |E| = f |V |2 = (|V |2 ).

4.11.3 Lista de Adjacncia


Tcnica freqentemente usada para representar grafo esparso, G = (V, E). Usa-se |V |
listas ligadas, uma para cada vrtice. A lista ligada para o vrtice vi V contm os elementos
de {w : (vi , w) A(vi )}, o conjunto de ns adjacentes a vi . Como resultado, as listas so
chamadas de listas de adjacncia.
A Figura 4.7 mostra a lista de adjacncia para o grafo direcionado da Figura 4.3.

G1

Figura 4.7. Lista de adjacncia para o grafo G1 da Figura 4.3.

60
A Figura 4.8 mostra a lista de adjacncia para o grafo no direcionado da Figura 4.5.

G4

Figura 4.8. Lista de adjacncia para o grafo G4 da Figura 4.5.

Por denio, um grafo esparso tem |E| = O(|V |). Conseqentemente o espao requerido para representar um grafo esparso usando lista de adjacncia O(|V |). Isto assintoticamente melhor que usar matriz de adjacncia que requer espao de O(|V |2 ).

4.12 Implementando Grafos


Formalmente, o grafo G = (V, E) um par ordenado com dois conjuntos: um conjunto
de vrtices e um conjunto de arestas. Informalmente, o grafo pode ser visto como uma estruturas
de que contm vrtices e arestas.

#def ine N 10
#def ine T ipo_Dado int
#def ine Graf o(X) T ipo_Dado X[N ][N ]
#def ine M V alor 99

Principais Operaes em Grafo


void Inicializa(Graf o (G));
void Conecta(Graf o (G), int i, int j, T ipo_Dado V );

61

void Desconecta(Graf o(G), int i, int j);


T ipo_Dado Adjacente(Graf o(G), int i, intj);
void Imprime(Graf o(G));
void M enores_Custos(Graf o(G), Graf o(C));
void Gera_Caminhos(Graf o(G), Graf o(P ));
void Exibe_Caminho(Graf o(P ), int i, int j, int f );
void M enor_Caminho(Graf o(G), int i, int j);
void Gera_Conectividade(Graf o(G), Graf o(Cd));
T ipo_Dado Centro(Graf o(G));

4.13 Representao de Grafo - Comparaes


Para selecionar o esquema apropriado representao de grafos necessrio entender
a relao tempo e espao utilizados. Embora os detalhes de implementao sejam omitidos,
pode-se tirar concluses sobre a performance esperada das implementaes.

4.13.1 Camparao do Espao


Considere a representao de um grafo direcionado G = (V, E). Alm do espao
necessrio para armazenar os vrtices |V | e arestas |E| necessrio espao para armazenar a
matriz de adjacncia. Nesse caso, a matriz |V | |V |. Logo, a quantidade de espao requerida
pela implementao em matriz de adjacncia

|V | tamanho(Vrtice) + |E| tamanho(Aresta) + |V |2 tamanho(Aresta) + O(1)


Por outro lado, considere a quantidade de espao requerido quando o mesmo grafo
representado em lista de adjacncia. Alm dos vrtices e arestas, existem |V | listas ligadas.
Cada lista tem tem um ponteiro para a cabea e cauda. Existem |E| elementos ligados, cada
um com um ponteiro para o prximo elemento da lista e um ponteiro para a aresta. Logo, o
espao requirido

|V | tamanho(Vrtice) + |E| tamanho(Aresta) + |V | tamanho(elemento)+


|E| (tamanho(elemento) + tamanho(Aresta)) + O(1)

62
Assumindo que todos os ponteiros requerem o mesmo espao, pode-se calculuir que a
lista de adjacncia usa menos espao que a matriz de adjacncia quando

|V |2 |V |
|E| <
2
Por exemplo, dado um grafo com 10 ns, a verso com lista de adjacncia usa menos
espao quando existe menos que 45 arestas. Pode-se dizer que a lista de adjacncia usa menos
espao quando a o grau mdio de um n, d = |E|/|V |, satisfaz d w |V |/2.

4.13.2 Comparao do Tempo


As seguintes operaes so muito usadas na implementao de diferentes algoritmos
de grafos:

Busca aresta (v, w)


Dado os vrtices v e w, localiza a instncia da aresta correspondente. Quando usando
matriz de adjacncia, a aresta pode ser encontrada em tempo constante;
Quando a lista de adjacncia usada, o pior caso roda no tempo O(|A(v)|), desde que

A(v)| o comprimento da lista de adjacncia associada com o vrtice v ;


Enumera todos as arestas
A localizao de todas as arestas no caso de matriz de adjacncia, necessrio examinar
todos as entradas |V |2 da matriz. Logo, o pior caso o tempo necessrio para enumerar
todas as arestas O(|V |2 );
A enumerao de todas as arestas no caso de lista de adjacncia requer o caminhamento
em |V | listas. Em cada lista existem |E| arestas. O pior caso dado por O(|V | + |E|).

Enumera arestas saindo de v


Para enumerar todos os vrtices que saem do vrtice v requer a busca completa da vsima
linha da matriz de adjacncia. O pior caso dado por O(|V |);
A enumerao de todas as arestas que saem do vrtice v uma operao trivial no caso
de lista de adjacncia. A vsima lista percorrida. Isso leva tempo O(|A|(v)|) no pior
caso.

63

Enumera arestas incidentes sobre w


A enumerao de todas as arestas incidentes sobre o vrtice w requer o caminhamento
completo da wsima coluna da matriz de adjacncia. O pior caso dado por O(|V |);
Os vrtices incidentes no vrtice w usando lista de adjacncia uma operao no trivial.
necessrio encontrar cada lista de adjacncia com o objetivo de encontrar todas as
arestas incidentes sobre o vrtice dado. O pior caso dado por O(|V | + |E|).
A Tabela 4.2 mostra um resumo com o tempo de execuo para cada operao associada a cada esquema de representao de grafos.
Tabela 4.2. Comparao das representaes de grafo.

Opero
Busca aresta (v, w)
Enumera todas as arestas
Enumera todas as arestas saindo de v
Enumera as arestas incidentes sobre w

Matriz de adjacncia
O(1)
O(|V |2 )
O(|V |)
O(|V |)

Lista de adjacncia
O(|A(v)|)
O(|V | + |E|)
O(|A(v)|)
O(|V | + |E|)

4.14 Busca em Grafo


Algoritmos para grafos tem em comum a caracterstica que eles sistemamtimante vistam todos os vrtices do grafo. Isto , o algoritmo caminha atravs da estrutura de dados do
grafo e executa alguma operao em cada vrtice do grafo. Esse processo de caminha atravs
do grafo e chamado busca em grafo (graph transversal).

4.14.1 Busca em Profundidade


4.14.2 Busca em Largura
4.14.3 Ordenao Topolgica
Ordenao topolgica a ordenao dos vrtices de um grafo direcionado dado pela
seguinte denio:

Denio 4.14.3.1 Considere um grafo direcionado acclico G = (V, E). A ordenao topolgica dos vrtices de G uma seqncia S = {v1 , v2 , . . . , v|v| } onde cada elemento de V aparece

64

exatamente uma vez. Para cada par de distintos vrtices vi e vj na seqncia S , se vi vj


uma aresta em G, isto , (vi , vj ) E , ento i < j (se existe um caminho do vrtice vi para o
vrtice vj , ento vi aparece antes de vj na ordenao).

1
2

d
G7

i
3

h
1

Figura 4.9. Grafo direcionado acclico.

Informalmente, a ordenao topolgica uma lista de vrtices de um grafo diercionado


acclico onde todos os sucessores de qualquer vrtice dado aparecem na sucesso depois do
vrtice dado. Considere o grco derecionado acclico mostrado na Figura 4.9. A seqncia

S = {a, b, c, d, e, f, g, h, i} uma ordenao topolgica dos vrtices de G7 .


Para verifcar, considere o conjunto de vrtices:

E = {(a, b), (a, c), (a, e), (b, d), (b, e), (c, f ), (c, h), (d, g), (e, g), (e, h), (e, i), (f, h), (g, i), (h, i)}
Os vrtices em cada aresta esto em ordem alfabtica, e assim deve ser a seqncia S .
Deve ser evidente tambm, a partir da Figura 4.9, que a ordenao topolgica no nica. Por
exemplo, as seqncias seguintes so ordenao toplogicas vlidas para o grafo G7 :

S 0 = {a, c, b, f, e, d, h, g, i}
S 00 = {a, b, d, e, g, c, f, h, i}
S 000 = {a, c, f, h, b, e, d, g, i}
..
.

65

4.15 Primeira N2
Elaborao de um programa para soluo de problema relacionado a busca em grafo
e algoritmos de menores caminhos.

160

60

450

300
200

400

5
150

250

170
250
12

120

10
29

180

35

75

14

60

50

1
190

9
70

2
160

60

170

90

Figura 4.10. Grafo com distncias entre cidades do estado de Gois, Braslia e Minas Gerais.

Na Figura 4.10, os vrtices representam as seguintes cidades: 1 - Ipameri, 2 - Catalo,


3 - Uruta, 4 - Pires do Rio, 5 - Goinia, 6 - Anpolis, 7 - Braslia, 8 - Caldas Novas, 9 - Araguari
e 10 - Uberlndia.
A formulao geral para a soluo do problema se refere ao grafo valorado da Figura
4.10. Escreva um programa em linguagem C para implemetar as seguintes operaes em grafo:
1. Criar grafo valorado a partir da Figura 4.10 usando a representao de matriz ou lista de

adjacncia atravs do uso repetido da funo conecta;


2. Ordenar topolgicamente os vrtices do grafo;
3. Calcular do centro do grafo;
4. Calcular a matriz/lista de custo do grafo;
5. Criar a matriz/lista de caminhos para o grafo;
6. Listar os menores caminhos entre vrtices do grafo;

66
7. Liberar memria no caso de implementao com lista de adjacncia.
a) Pela elaborao do programa, deve ser entendido que o programa deve ser elaborado
na linguagem C e a nota atribuda considerar a correo, ecincia, paragrafao (indentao), uso adequado de comentrios e legibilidade do programa. Alm disso, ser
considerado o uso de todos os conceitos (estruturas de controle, estruturas de dados,
sub-algoritmos) na correo do programa;
b) O programa deve denir uma estrutura de dados para armazenar o grafo: matriz ou lista
de adjacncia.
c) Data de entrega: ver calendrio.
d) O trabalho completo e correto vale 6.0 (seis) pontos para a representao do grafo com
matriz de adjacncia. O algoritmo de Floyd-Warshall deve ser usado obrigatoriamente
para o clculo da matriz de custo e matriz de menores caminhos. Detalhes do algoritmo
de Floyd-Warshall deve ser incluso na reviso bibliogrca do texto.
e) A soluo usando a represetao com lista de adjacncia vale 10.0 (dez) pontos. O algoritmo de Dijkstra deve ser usado obrigatoriamente para a criao da lista de custo e
lista de menores caminhos. Detalhes do algoritmo de Dijkstra deve ser incluso na reviso
bibliogrca do texto.

Anda mungkin juga menyukai