You are on page 1of 203

Algoritmos e

Estruturas de Dados II
Algoritmos em Grafos
Antonio Alfredo Ferreira Loureiro
loureiro@dcc.ufmg.br
http://www.dcc.ufmg.br/~loureiro
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 1
Motivao
Suponha que existam seis sistemas computacionais (A, B, C, D, E, e F) inter-
conectados entre si da seguinte forma:
E
A
B
C
D F
Esta informao pode ser representada por este diagrama, chamado de
grafo.
Este diagrama identica unicamente um grafo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 2
Motivao
Dois objetos especiais:
Vrtices
Arestas
F
E
B
A C
D
Vrtice
Aresta
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 3
Denio
Um grafo G consiste de dois conjuntos nitos:
1. Vrtices V (G)
2. Arestas E(G)
Em geral, um grafo G representado como:
G = (V, E)
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 4
Terminologia
Cada aresta est associada a um conjunto de um ou dois vrtices, chamados
ns terminais.
Extremidade de uma aresta: vrtice da aresta.
Funo arestaextremidade: associa aresta a vrtices.
Lao (Loop): aresta somente com n terminal.
Arestas paralelas: arestas associadas ao mesmo conjunto de vrtices.
Uma aresta dita conectar seus ns terminais.
Dois vrtices que so conectados por uma aresta so chamados de adja-
centes.
Um vrtice que n terminal de um lao dito ser adjacente a si prprio.
Uma aresta dita ser incidente a cada um de seus ns terminais.
Duas arestas incidentes ao mesmo vrtice so chamadas de adjacentes.
Um vrtice que no possui nenhuma aresta incidente chamado de isolado.
Um grafo com nenhum vrtice chamado de vazio.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 5
Terminologia
v
2
v
5
v
7
v
6
v
1
e
2
v
5
e
2
e
3
e
6
e
4
e
3
v
1
Arestas paralelas Vrtice isolado
Lao
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 6
Terminologia
Conjunto de vrtices:
v
1
, v
2
, v
3
, v
4
, v
5
, v
6
.
Conjunto de arestas:
e
1
, e
2
, e
3
, e
4
, e
5
, e
6
, e
7
.
Funo arestavrtice:
Aresta Vrtice
e
1
v
1
, v
2

e
2
v
1
, v
3

e
3
v
1
, v
3

e
4
v
2
, v
3

e
5
v
5
, v
6

e
6
v
5

e
7
v
6

e
3
e 3
v
1
e
4
e
2
v
1
v
4
v
6
v
5
v
6
e
5
e
7
e
2
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 7
Terminologia
e
1
, e
2
e e
3
so incidentes a
v
1
.
v
2
e v
3
so adjacentes a v
1
.
e
2
, e
3
e e
4
so adjacentes
a e
1
.
e
6
e e
7
so laos.
e
2
e e
3
so paralelas.
v
5
e v
6
so adjacentes en-
tre si.
v
4
um vrtice isolado.
e
3
e 3
v
1
e
4
e
2
v
1
v
4
v
6
v
5
v
6
e
5
e
7
e
2
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 8
Terminologia
Seja um grafo especicado
como:
Conjunto de vrtices:
v
1
, v
2
, v
3
, v
4
.
Conjunto de arestas:
e
1
, e
2
, e
3
, e
4
.
Funo arestavrtice:
Aresta Vrtice
e
1
v
1
, v
3

e
2
v
2
, v
4

e
3
v
2
, v
4

e
4
v
3

Duas possveis representaes deste grafo:


v
4
v
3
e
2
e
3
v
4
e
1
e
1
v
2
v
2
e
3
e
3
v
4
e
1
v
1
e
2
v
4
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 9
Terminologia
Considere os dois diagramas abaixo. Rotule os vrtices e as arestas de tal
forma que os dois diagramas representem o mesmo grafo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 10
Terminologia
Uma possvel identicao de vrtices e
rtulos pode ser:
1
v
2
v
3
v
4
v
5
v
1
e
4
e
3
e
2
e
5
e
1
v
4
v
2
v
3
v
1
e
5
v
2
e
3
e
4
e
5
e
Os dois diagramas so repre-
sentados por:
Conjunto de vrtices:
v
1
, v
2
, v
3
, v
4
, v
5
.
Conjunto de arestas:
e
1
, e
2
, e
3
, e
4
, e
5
.
Funo arestavrtice:
Aresta Vrtice
e
1
v
1
, v
2

e
2
v
2
, v
3

e
3
v
3
, v
4

e
4
v
4
, v
5

e
5
v
5
, v
1

UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 11


Modelos usando grafos
Grafo Vrtice Aresta
Comunicao Centrais telefnicas, Com-
putadores, Satlites
Cabos, Fibra ptica, Enlaces
de microondas
Circuitos Portas lgicas, registradores,
processadores
Filamentos
Hidrulico Reservatrios, estaes de
bombeamento
Tubulaes
Financeiro Aes, moeda Transaes
Transporte Cidades, Aeroportos Rodovias, Vias areas
Escalonamento Tarefas Restries de precedncia
Arquitetura funcional de
um software
Mdulos Interaes entre os mdulos
Internet Pginas Web Links
Jogos de tabuleiro Posies no tabuleiro Movimentos permitidos
Relaes sociais Pessoas, Atores Amizades, Trabalho conjunto
em lmes
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 12
Modelos usando grafos
Circuito eltrico: Leis de Kirchoff
Gustav Kirchoff (1824
1887), fsico alemo. Foi o primeiro a
analisar o comportamento de rvores
matemticas com a investigao de
circuitos eltricos.
i
1
+i
4
= i
2
+i
3
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 13
Modelos usando grafos
Estruturas de molculas de hidrocarboneto
Arthur Cayley (1821
1895), matemtico ingls. Logo aps
o trabalho de Kirchoff, Cayley usou
rvores matemticas para enumerar
todos os ismeros para certos hidro-
carbonetos.
H H C
C
H
C C
C
H
C C
C
H
C C
C
H
C
Butano
C H
H
H
H
H
C
C
H C
H
H
C C
H
H
Isobutano
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 14
Modelos usando
grafos
Conectividade na
Internet
Este grafo mostra a conectividade
entre roteadores na Internet, re-
sultado do trabalho Internet Map-
ping Project de Hal Burch e Bill
Cheswick.
Atualmente o trabalho est sendo
desenvolvido comercialmente pela
empresa Lumeta (www.lumeta.com).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 15
Modelos usando grafos
Conectividade na Internet
Este trabalho de Stephen
Coast (http://www.fractalus
.com/steve/stuff/ipmap/) est
medindo e mapeando a estru-
tura e desempenho da Internet.
Este um de seus trabalhos
iniciais.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 16
Modelos usando grafos
Conectividade na RNP2
A Rede Nacional de Pesquisa
(RNP) criou a primeira infra-
estrutura de comunicao (back-
bone) no Brasil para interconexo
com a Internet. Atualmente,
este backbone conhecido como
RNP2.
O grafo de conectividade da
RNP2 tem uma estrutura
(topologia) basicamente na
forma de estrela. Note que difer-
entes enlaces de comunicao
(arestas) possuem diferentes
capacidades.
A Internet formada basica-
mente por interconexo de Sis-
temas Autnomos (AS Au-
tonomous System), onde cada
AS um backbone distinto.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 17
Modelos usando grafos
Grafo de derivao sinttica
Noam Chomsky John Backus Peter Naur
Chomsky e outros desenvolveram novas formas de
descrever a sintaxe (estrutura gramatical) de lingua-
gens naturais como ingls. Este trabalho tornou-se
bastante til na construo de compiladores para
linguagens de programao de alto nvel. Neste
estudo, rvores (grafos especiais) so usadas para
mostrar a derivao de sentenas corretas gramati-
calmente a partir de certas regras bsicas.
comum representar estas regras, chamadas de
produo, usando uma notao proposta por Backus
(1959) e modicada por Naur (1960) usada para des-
crever a linguagem de programao Algol. Esta no-
tao chamada de BNF (Backus-Naur Notation).
Notao BNF (subconjunto da
gramtica da lngua inglesa):
sentence) ::= noun phrase)verb phrase)
noun phrase) ::= article)noun) |
article)adjective)noun)
verb phrase) ::= verb)noun phrase)
article) ::= the
adjective) ::= young
noun) ::= man | ball
verb) ::= caught
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 18
Modelos usando grafos
Vegetarianos e Canibais (1)
Seja uma regio formada por vegetarianos e canibais.
Inicialmente, dois vegetarianos e dois canibais esto na margem esquerda
(ME) de um rio.
Existe um barco que pode transportar no mximo duas pessoas e sempre
atravessa o rio com pelo menos uma pessoa.
O objetivo achar uma forma de transportar os dois vegetarianos e os dois
canibais para a margem direita (MD) do rio.
Em nenhum momento, o nmero de canibais numa margem do rio pode ser
maior que o nmero de vegetarianos, caso contrrio, . . .
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 19
Modelos usando grafos
Vegetarianos e Canibais (2)
Soluo:
Notao para representar cada cenrio possvel.
Modelo para representar a mudana de um cenrio em outro vlido.
Notao: ME/MD
vvccB/ ME: 2v, 2c e o barco (B); MD: .
vc/Bvc ME: 1v, 1c; MD: B, 1v e 1c.
Modelo: grafo
Vrtice: cenrio vlido.
Aresta: transio vlida de um dado cenrio em outro.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 20
Modelos usando grafos
Vegetarianos e Canibais (3)
Uma possvel seqncia vlida de cenrios :
/Bvvcc
vv/Bcc
vvc/Bc
cc/Bvv
vvcB/c
vvccB/
c/Bvvc
ccB/vv
vcB/vc
vc/Bvc
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 21
Modelos usando grafos
Visualizando grafos
Graph Drawing: Algorithms for the Vi-
sualization of Graphs. Giuseppe Di
Battista, Peter Eades, Roberto Tamas-
sia, e Ioannis G. Tollis. Prentice Hall
Engineering, Science & Math, 432 pp.,
ISBN 0-13-301615-3.
Para muitas aplicaes importante dese-
nhar grafos com certas restries:
Planares, i.e., no h cruzamento de
arestas
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 22
Grafo simples
Denio: Um grafo simples um grafo que no possui laos nem arestas
paralelas. Num grafo simples, uma aresta com vrtices (ns terminais) u e v
representada por uv.
Exemplo: Quais so os grafos com quatro vrtices u, v, w, x e duas arestas,
sendo que uma delas a aresta uv?
Dado quatro vrtices, existem C(4, 2) = 6 subconjuntos, que denem
arestas diferentes: uv, uw, ux, vw, vx, wx.
Logo, todos os grafos simples de quatro vrtices e duas arestas, sendo uma
delas a uv so:
x
v u
w x
v u
w x
v u
w x
v u
w x
v u
w
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 23
Grafo dirigido (1)
Denio: Um grafo dirigido ou digrafo ou direcionado G consiste de dois con-
juntos nitos:
1. Vrtices V (G)
2. Arestas dirigidas E(G), onde cada aresta associada a um par ordenado
de vrtices chamados de ns terminais. Se a aresta e associada ao par
(u, v) de vrtices, diz-se que e a aresta dirigida de u para v.
v
2
v
5
v
7
v
6
v
1
e
5
e
2
e
3
e
8
e
4
e
3
v
4
v
7
e
6
e
1
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 24
Grafo dirigido (2)
Para cada grafo dirigido, existe um grafo simples (no dirigido) que obtido
removendo as direes das arestas, e os loops.
Grafo dirigido:
v
2
v
5
v
7
v
6
v
3
v
4
v
1
Grafo no dirigido correspondente:
v
2
v
5
v
7
v
6
v
3
v
4
v
1
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 25
Grafo dirigido (3)
A verso dirigida de um grafo no dirigido G = (V, E) um grafo dirigido
G
t
= (V
t
, E
t
) onde (u, v) E
t
sse (u, v) E.
Cada aresta no dirigida (u, v) em G substituda por duas arestas dirigidas
(u, v) e (v, u).
Em um grafo dirigido, um vizinho de um vrtice u qualquer vrtice adjacente
a u na verso no dirigida de G.
Grafo no dirigido:
v
2
v
3
v
1
Grafo dirigido correspondente:
v
2
v
3
v
1
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 26
Grafo completo (1)
Denio: Um grafo completo de n vrtices, denominado K
n

, um grafo sim-
ples com n vrtices v
1
, v
2
, . . . , v
n
, cujo conjunto de arestas contm exatamente
uma aresta para cada par de vrtices distintos.
Exemplo: Grafos completos com 2, 3, 4, e 5 vrtices.
v
1
v
2
v
1
v
2
v
3
v
2
v
3
v
4
v
4
v
3
v
5
v
1
v
2
v
5
K
4
K
3
K
2
K
1

A letra K representa a letra inicial da palavra komplett do alemo, que signica completo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 27
Grafo completo (2)
Dado o grafo completo K
n
temos que
Vrtice est conectado aos vrtices atravs de # arestas
(no conectados ainda)
v
1
v
2
, v
3
, . . . , v
n
n 1
v
2
v
3
, v
4
, . . . , v
n
n 2
.
.
.
.
.
.
.
.
.
v
n1
v
n
1
v
n
0
ou seja, se contarmos o nmero total de arestas de K
n
temos
n1

i=1
i =
(n 1) n
2
=
n
2
n
2
=
([V [
2
[V [)
2
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 28
Grafo completo (3)
Os grafos K
2
, K
3
, K
4
, e K
5
v
1
v
2
v
1
v
2
v
3
v
2
v
3
v
4
v
4
v
3
v
5
v
1
v
2
v
5
K
4
K
3
K
2
K
1
possuem a seguinte quantidade de arestas:
Grafo # arestas
K
2
1
K
3
3
K
4
6
K
5
10
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 29
Quantidade de grafos distintos com n vrtices (1)
O nmero total de grafos distintos com n vrtices ([V [)
2
n
2
n
2
= 2
([V [
2
[V [)
2
que representa a quantidade de maneiras diferentes de escolher um subcon-
junto a partir de
n
2
n
2
=
([V [
2
[V [)
2
possveis arestas de um grafo com n vrtices.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 30
Quantidade de grafos distintos com n vrtices (2)
Exemplo: Quantos grafos distintos com 3 vrtices existem?
Um grafo com 3 vrtices v
1
, v
2
e v
3
possui no mximo 3 arestas, ou seja,
E = v
1
v
2
, v
1
v
3
, v
2
v
3
.
O nmero de sub-conjuntos distintos de E dado por 1(E), ou seja, o con-
junto potncia de E que vale 2
[E[
.
1(E) =
_

_
,
v
1
v
2
,
v
1
v
3
,
v
2
v
3
,
v
1
v
2
, v
2
v
3
,
v
1
v
3
, v
2
v
3
,
v
1
v
2
, v
1
v
3
,
v
1
v
2
, v
1
v
3
, v
2
v
3

_
Cada elemento de 1(E) deve
ser mapeado num grafo com 3
vrtices levando a um grafo dis-
tinto:
3
v
1
v
2
v
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 31
Quantidade de grafos distintos com n vrtices (3)
Exemplo: Quantos grafos distintos com 3 vrtices existem (continuao)?
Para cada elemento (sub-conjunto) do conjunto potncia de E temos umgrafo
distinto associado, ou seja, o nmero total de grafos com 3 vrtices :
2
n
2
n
2
= 2
3
2
3
2
= 2
3
= 8
3
v
1
v
2
v
3
v
1
v
2
v
3
v
1
v
2
v
3
v
1
v
2
v
3
v
1
v
2
v
3
v
1
v
2
v
3
v
1
v
2
v
3
v
1
v
2
v
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 32
Grafo ciclo
Denio: Um grafo ciclo de n vrtices, denominado C
n
, n 3, um grafo
simples com n vrtices v
1
, v
2
, . . . , v
n
, e arestas v
1
v
2
, v
2
v
3
, . . ., v
n1
v
n
, v
n
v
1
.
Exemplo: Grafos ciclos de 3, 4, e 5 vrtices.
v
1
v
2
v
3
v
2
v
3
v
4
v
4
v
3
v
5
v
1
v
2
v
5
C
4
C
3
C
1
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 33
Grafo roda
Denio: Um grafo roda, denominado W
n
, um grafo simples com n + 1
vrtices que obtido acrescentado um vrtice ao grafo ciclo C
n
, n 3, e
conectando este novo vrtice a cada um dos n vrtices de C
n
.
Exemplo: Grafos rodas de 3, 4, e 5 vrtices.
v
1
v
2
v
3
v
2
v
3
v
4
v
4
v
3
v
5
v
1
v
2
v
5
W
4
W
3
W
4
v
5
v
6
v
1
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 34
Grafo Cubo-n (1)
Denio: Um grafo cubo-n de 2
n
vrtices, denominado Q
n
, um grafo simples
que representa os 2
n
strings de n bits. Dois vrtices so adjacentes sse os
strings que eles representam diferem em exatamente uma posio.
O grafo Q
n+1
pode ser obtido a partir do grafo Q
n
usando o seguinte algoritmo:
1. Faa duas cpias de Q
n
;
2. Prexe uma das cpias de Q
n
com 0 e a outra com 1;
3. Acrescente uma aresta conectando os vrtices que s diferem no primeiro
bit.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 35
Grafo Cubo-n (2)
Exemplo: Grafos Q
n
, para n = 1, 2, e 3 vrtices.
100
1
Q
2
Q
3
Q
0 1 00
10 11
01
011
110 111
010
101
000 001
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 36
Grafo bipartido (1)
Denio: Um grafo bipartido

de m, n vrtices, denominado K
m,n
, um grafo
simples com vrtices v
1
, v
2
, . . . , v
m
e w
1
, w
2
, . . . , w
n
, que satisfaz as seguintes
propriedades:
i, k = 1, 2, . . . , m
j, l = 1, 2, . . . , n
1. uma aresta entre cada par de vrtices v
i
e w
j
;
2. uma aresta entre cada par de vrtices v
i
e v
k
;
3. uma aresta entre cada par de vrtices w
j
e w
l
;

Tambm chamado na literatura de grafo bipartido completo.


UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 37
Grafo bipartido (2)
Exemplo: Grafos bipartidos K
3,2
e K
3,3
.
3,3
1
v
2
v
3
v
1
w
1
v
2
w
2
v
3
v
3
w
2
w
1
w
K
3,2
K
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 38
Multigrafo
Denio: Um multigrafo um grafo que no possui laos mas pode ter arestas
paralelas. Formalmente, um multigrafo G = (V, E) consiste de um conjunto V
de vrtices, um conjunto E de arestas, e uma funo f de E para u, v[u, v
V, u ,= v. As arestas e
1
e e
2
so chamadas mltiplas ou paralelas se f(e
1
) =
f(e
2
).
e
3
e 3
v
1
e
4
e
2
v
1
v
4
v
6
v
5
v
5
e
2
Vrias aplicaes precisam ser modeladas como um multigrafo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 39
Pseudografo
Denio: Um pseudografo um grafo que pode ter laos e arestas paralelas.
Formalmente, um pseudografo G = (V, E) consiste de um conjunto V de vr-
tices, um conjunto E de arestas, e uma funo f de E para u, v[u, v V .
Pseudografo mais geral que um multigrafo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 40
Multigrafo dirigido
Denio: Um multigrafo dirigido um grafo que pode ter laos e arestas parale-
las. Formalmente, um multigrafo dirigido G = (V, E) consiste de um con-
junto V de vrtices, um conjunto E de arestas, e uma funo f de E para
u, v[u, v V . As arestas e
1
e e
2
so arestas mltiplas se f(e
1
) = f(e
2
).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 41
Hipergrafo
Denio: Um hipergrafo H(V, F) denido pelo par de conjuntos V e F, onde:
V um conjunto no vazio de vrtices;
F um conjunto que representa uma famlia e partes no vazias de V .
Um hipergrafo um grafo no dirigido em que cada aresta conecta um nmero
arbitrrio de vrtices.
Seja, por exemplo, o grafo H(V, F)
dado por:
V = v
1
, v
2
, v
3
, v
4

F = v
1
, v
2
, v
4
, v
2
, v
3
, v
4
, v
2
, v
3

v
1
v
2
v
3
v
4
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 42
Terminologia de grafos
Tipo Aresta Arestas mltiplas? Laos permitidos?
Grafo simples No dirigida No No
Multigrafo No dirigida Sim No
Pseudografo No dirigida Sim Sim
Grafo dirigido Dirigida No Sim
Multigrafo dirigido Dirigida Sim Sim
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 43
Grafo valorado
Denio: Um grafo valorado um grafo em que cada aresta tem um valor as-
sociado. Formalmente, um grafo valorado G = (V, E) consiste de um conjunto
V de vrtices, um conjunto E de arestas, e uma funo f de E para P, onde P
representa o conjunto de valores (pesos) associados s arestas.
Grafo valorado usado para modelar vrios problemas importantes emCin-
cia da Computao.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 44
Grafo imersvel
Denio: Um grafo imersvel em uma superfcie S se puder ser representado
geogracamente em S de tal forma que arestas se cruzem nas extremidades
(vrtices).
Um grafo planar um grafo que imersvel no plano.
As conexes de uma placa de circuito impresso devem ser representadas
por um grafo planar.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 45
Subgrafo
Denio: Um grafo H = (V
t
, E
t
) dito ser um subgrafo de um grafo G =
(V, E) sse:
cada vrtice de H tambm um vrtice de G, ou seja, V
t
V ;
cada aresta de H tambm uma aresta de G, ou seja, E
t
E; e
cada aresta de H temos mesmos ns terminais emG, ou seja, se (u, v) E
t
ento (u, v) E.
Exemplo: Todos os subgrafos do grafo G:
v
1
v
2
v
1
v
3
e
1
e 1
v
2
v
1
v
2
v
3
e
2
v
2
e
1
v
2
v
2
e
1
e 1
v
2
v
1
e 1
v
2
v
3
e
2
e
1
v
2
v
3
e
2
e
1
e 1
v
2
v
3
e
2
e
1
e 1
v
2
v
3
e
G
1
10
8
3
2 1
9
4 5
7
11
6
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 46
Grau de um vrtice (1)
Denio: Seja G um grafo e um vrtice v de G. O grau de v, denominado
grau(v) (deg(v)), igual ao nmero de arestas que so incidentes a v, com
uma aresta que seja um lao contada duas vezes. O grau total de G a soma
dos graus de todos os vrtices de G.
Exemplo: Determinando o grau de v
1
no grafo abaixo.
4
v
3
v
2
v
1
v
v
1
grau( ) = 5
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 47
Grau de um vrtice (2)
Em um grafo dirigido o grau de um vrtice v o nmero de arestas quem saem
dele (out-deg(v)) mais o nmero de arestas que chegam nele (in-deg(v)).
Exemplo: Determinando o grau de v
3
no grafo abaixo.
v
1
v
2
v
5
v
7
v
6
v
1
e
5
e
2
e
3
e
8
e
4
e
3
v
4
v
7
e
6
e
grau( ) = 4
3
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 48
Grau de um vrtice (3)
Exemplo: Seja o grafo Gabaixo. Determine o grau de cada vrtice e o grau total
de G.
2
e
1
e 3
v
2
v
3
e
1
v
grau(v
1
) = 0, j que no existe aresta incidente a v
1
, que um vrtice
isolado.
grau(v
2
) = 2, j que e
1
e e
2
so incidentes a v
2
.
grau(v
3
) = 4, j que e
1
, e
2
e e
3
so incidentes a v
3
, sendo que e
3
contribui
com dois para o grau de v
3
.
Grau de G = grau(v
1
) + grau(v
2
) + grau(v
3
) = 0 + 2 + 4 = 6
Grau de G = 2 nmero de arestas de G, que 3, ou seja, cada aresta
contribui com dois para o grau total do grafo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 49
Grau de um vrtice (4)
Teorema (do aperto de mos ou handshaking): Seja G um grafo. A soma dos
graus de todos os vrtices de G duas vezes o nmero de arestas de G. Es-
pecicamente, se os vrtices de G so v
1
, v
2
, . . . , v
n
, onde n um inteiro posi-
tivo, ento
Grau de G = grau(v
1
) + grau(v
2
) + . . . + grau(v
n
)
= 2 nmero de arestas de G.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 50
Grau de um vrtice (5)
Prova:
Seja G um grafo arbitrrio mas escolhido arbitrariamente.
Se G no possui vrtices ento no possui arestas, e o grau total 0, que
o dobro das arestas, que 0.
Se G tem n vrtices v
1
, v
2
, . . . , v
n
e m arestas, onde n um inteiro positivo
e m um inteiro no negativo. A hiptese que cada aresta de G contribui
com 2 para o grau total de G.
Suponha que e seja uma aresta arbitrria com extremidades v
i
e v
j
. Esta
aresta contribui com 1 para o grau de v
i
e 1 para o grau de v
j
.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 51
Grau de um vrtice (6)
Prova (continuao):
Isto verdadeiro mesmo se i = j j que no caso de um lao conta-se duas
vezes para o grau do vrtice no qual incide.
v
e
i
v
j
e
j
=
i
v v
i ,= j i = j
Assim, a aresta e contribui com 2 para o grau total de G. Como e foi escolhido
arbitrariamente, isto mostra que cada aresta de G contribui com 2 para o grau
total de G.
.
.
. O grau total de G = 2 nmero de arestas de G.
Corolrio: O grau total de um grafo par.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 52
Grafo regular
Denio: Um grafo dito ser regular quando todos os seus vrtices tm o
mesmo grau.
Exemplo: Os grafos completos com 2, 3, 4, e 5 vrtices so grafos regulares.
v
1
v
2
v
1
v
2
v
3
v
2
v
3
v
4
v
4
v
3
v
5
v
1
v
2
v
5
K
4
K
3
K
2
K
1
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 53
Determinando a existncia de certos grafos (1)
possvel ter um grafo com quatro vrtices de graus 1, 1, 2, e 3?
No. O grau total deste grafo 7, que um nmero mpar.
possvel ter um grafo com quatro vrtices de graus 1, 1, 3, e 3?
Sim. Exemplos:
b
d c
a
a b
c d
a b
c d
a b
c d
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 54
Determinando a existncia de certos grafos (2)
possvel ter um grafo simples com quatro vrtices de graus 1, 1, 3, e 3?
No.
Prova (por contradio):
Suponha que exista um grafo simples G com quatro vrtices de graus 1, 1, 3, e 3. Chame
a e b os vrtices de grau 1, e c e d os vrtices de grau 3. Como grau(c) = 3 e G no
possui laos ou arestas paralelas, devem existir arestas que conectam c aos vrtices a, b
e d.
b
d c
a
Pelo mesmo raciocnio devem existir arestas que conectam d aos vrtices a, b e c.
b
d c
a
Mas o grau(a) 2 e grau(b) 2, o que contradiz a suposio que estes vrtices tm
grau 1.
.
.
. A suposio inicial falsa e, conseqentemente, no existe um grafo simples com quatro
vrtices com graus 1, 1, 3, e 3.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 55
Determinando a existncia de certos grafos (3)
possvel num grupo de nove pessoas, cada um ser amigo de exatamente
cinco outras pessoas?
No.
Prova (por contradio):
Suponha que cada pessoa represente um vrtice de um grafo e a aresta
indique uma relao de amizade entre duas pessoas (vrtices).
Suponha que cada pessoa seja amiga de exatamente cinco outras pes-
soas.
Ento o grau de cada vrtice cinco e o grau total do grafo 45.
.
.
. Isto contradiz o corolrio que o grau total de um grafo par e, conseqen-
temente, a suposio falsa.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 56
Caracterstica de um grafo
Teorema: Emqualquer grafo G, existe umnmero par de vrtices de grau mpar.
Prova:
Suponha que G tenha n vrtices de grau mpar e m vrtices de grau par, onde n e m so
inteiros no negativos. [Deve-se mostrar que n par.]
Se n = 0, ento G tem um nmero par de vrtices de grau mpar.
Suponha que n 1. Seja P a soma dos graus de todos os vrtices de grau par, I a soma
dos graus de todos os vrtices de grau mpar, e T o grau total de G.
Se p
1
, p
2
, . . . , p
m
so os vrtices de grau par e i
1
, i
2
, . . . , i
n
so os vrtices de grau mpar,
P = grau(p
1
) + grau(p
2
) + . . . + grau(p
m
),
I = grau(i
1
) + grau(i
2
) + . . . + grau(i
n
),
T = grau(p
1
) + grau(p
2
) + . . . + grau(p
m
) +
grau(i
1
) + grau(i
2
) + . . . + grau(i
n
)
= P +I [que deve ser um nmero par]
P par, j que P = 0 ou P a soma de grau(p
r
), 0 r m, que par.
Mas T = P +I e I = T P. Assim, I a diferena de dois inteiros pares, que par.
Pela suposio, grau(i
s
), 0 s n, mpar. Assim, I, um inteiro par, a soma de n inteiros
mpares grau(i
1
) + grau(i
2
) + . . . + grau(i
n
). Mas a soma de n inteiros mpares par, ento
n par [o que devia ser mostrado].
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 57
Determinando a existncia de certos grafos (4)
possvel ter um grafo com 10 vrtices de graus 1, 1, 2, 2, 2, 3, 4, 4, 4, e 6?
No. Duas formas de provar:
1. Este grafo supostamente possui trs vrtices de grau mpar, o que no
possvel.
2. Este grafo supostamente possui um grau total = 29, o que no possvel.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 58
O problema das sete pontes de Knigsberg ou
O incio da teoria dos grafos (1)
Leonard Euler (1707
1783), matemtico suo. Foi um
cientista extremamente produtivo
contribuindo para muitas reas da
matemtica como teoria dos nmeros,
anlise combinatria e anlise, bem
como o seu uso em reas como
msica e arquitetura naval. No total
escreveu mais de 1100 artigos e
livros.
A rea de teoria dos grafos comea
em 1736 quando publica um artigo
contendo a soluo para o problema
das sete pontes de Knigsberg, na
poca uma cidade da Prssia e, atual-
mente, cidade da Rssia.
A cidade de Knigsberg foi construda numa regio
onde haviam dois braos do Rio Pregel e uma ilha.
Foram construdas sete pontes ligando diferentes
partes da cidade, como mostrado na gura:
Problema: possvel que uma pessoa faa um per-
curso na cidade de tal forma que inicie e volte a
mesma posio passando por todas as pontes so-
mente uma nica vez?
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 59
O problema das sete pontes de Knigsberg ou
O incio da teoria dos grafos (2)
Referncia: Northern Ger-
many as far as the Bavar-
ian and Austrian Frontiers;
Handbook for Travellers by
Karl Baedeker. Fifteenth Re-
vised Edition. Leipzig, Karl
Baedeker; New York, Charles
Scribners Sons 1910.
History: Kaliningrad was for-
merly the Prussian port of
Knigsberg, capital of East
Prussia. It was captured by
the Red Army in April 1945
and ceded to the Soviet Union
at the Potsdam conference.
It was renamed in honor of
senior Soviet leader Mikhail
Kalinin, although he never ac-
tually visited the area.
Mapa parcial (recente) da
cidade.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 60
O problema das sete pontes de Knigsberg (3)
Euler resolveu este problema transformando-o em teoria dos grafos.
Modelagem proposta por Euler:
Todos os pontos de uma dada rea de terra podem ser representados por
um nico ponto j que uma pessoa pode andar de um lado para o outro
sem atravessar uma ponte.
Um ponto conectado a outro se houver uma ponte de um lado para o
outro.
Gracamente, Euler representou o problema como:
A
B
C
D
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 61
O problema das sete pontes de Knigsberg (4)
Problema a ser resolvido:
possvel achar um caminho que comece e termine num vrtice qualquer
(A, B, C, ou D) e passe por cada aresta, exatamente, e uma nica vez?,
ou ainda,
possvel desenhar este grafo que comece e termine na mesma posio
sem levantar o lpis do papel?
D
C
A
B
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 62
O problema das sete pontes de Knigsberg (5)
Aparentemente no existe soluo!
Partindo do vrtice A, toda vez que se passa por qual-
quer outro vrtice, duas arestas so usadas: a de
chegada e a de sada.
Assim, se for possvel achar uma rota que usa todas
as arestas do grafo e comea e termina em A, ento o
nmero total de chegadas e sadas de cada vrtice
deve ser um valor mltiplo de 2.
No entanto, temos:
grau(A) = grau(C) = grau(D) = 3; e
grau(B) = 5.
Assim, por este raciocnio informal no possvel ter
uma soluo para este problema.
D
C
A
B
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 63
Caminhamentos em grafos
Caminho (1)
Seja G um grafo no dirigido, n 1, e v e w vrtices de G.
Caminho (walk): Um caminho de v para w uma seqncia alternada de
vrtices e arestas adjacentes de G. Um caminho tem a forma:
(v =)v
0
e
1
v
1
e
2
v
2
. . . v
n1
e
n
v
n
(= w)
ou ainda
v
0
[v
0
, v
1
]v
1
[v
1
, v
2
]v
2
. . . v
n1
[v
n1
, v
n
]v
n
onde v
0
= v e v
n
= w.
7
4
e
2
v
1
3
v
2
e
5
e 6
e
1
v 3
e 4
v
e
e
Um possvel caminho entre v
1
e v
4
:
v
1
e
6
v
3
e
2
v
4
e
7
v
2
e
1
v
3
e
2
v
4
e
3
v
1
e
4
v
2
e
5
v
4
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 64
Caminhamentos em grafos
Caminho (2)
No caso de arestas mltiplas, deve-se indicar qual delas est sendo usada.
Vrtices v
0
e v
n
so extremidades do caminho.
Tamanho (comprimento) do caminho: nmero de arestas do mesmo, ou seja,
nmero de vrtices menos um.
O caminho trivial de v para v consiste apenas do vrtice v.
Se existir um caminho c de v para w ento w alcanvel a partir de v via c.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 65
Caminhamentos em grafos
Caminho fechado (1)
Caminho fechado (Closed walk): Caminho que comea e termina no mesmo
vrtice:
(v =)v
0
e
1
v
1
e
2
v
3
. . . v
n1
e
n
v
n
(= w)
onde v = w.
7
4
e
2
v
1
3
v
2
e
5
e 6
e
1
v 3
e 4
v
e
e
Um possvel caminho fechado :
v
1
e
6
v
3
e
2
v
4
e
7
v
2
e
1
v
3
e
2
v
4
e
3
v
1
e
4
v
2
e
5
v
4
e
3
v
1
Um caminho fechado com pelo menos uma aresta chamado de ciclo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 66
Caminhamentos em grafos
Caminho fechado (2)
Dois caminhos fechados
v
0
v
1
. . . v
n
e v
t
0
v
t
1
. . . v
t
n
formam o mesmo ciclo se existir um inteiro j tal que
v
t
i
= v
i+j
mod n,
para i = 0, 1, . . . , n 1.
7
4
e
2
v
1
3
v
2
e
5
e 6
e
1
v 3
e 4
v
e
e
O caminho fechado v
1
v
2
v
3
v
4
v
1
forma o
mesmo ciclo que os caminhos fechados
v
2
v
3
v
4
v
1
v
2
, v
3
v
4
v
1
v
2
v
3
e v
4
v
1
v
2
v
3
v
4
.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 67
Caminhamentos em grafos
Trajeto
Trajeto (Path): Caminho de v para w sem arestas repetidas:
(v =)v
0
e
1
v
1
e
2
v
3
. . . v
n1
e
n
v
n
(= w)
onde todas as arestas e
i
so distintas, ou seja, e
i
,= e
k
, para qualquer i ,= k.
7
4
e
2
v
1
3
v
2
e
5
e 6
e
1
v 3
e 4
v
e
e
Um possvel trajeto :
v
1
e
6
v
3
e
2
v
4
e
7
v
2
e
1
v
3
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 68
Caminhamentos em grafos
Trajeto simples
Trajeto simples (Simple path): Caminho de v para w sem arestas e vrtices
repetidos.
7
4
e
2
v
1
3
v
2
e
5
e 6
e
1
v 3
e 4
v
e
e
Um possvel trajeto simples :
v
1
e
6
v
3
e
2
v
4
e
7
v
2
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 69
Caminhamentos em grafos
Circuito
Circuito (Circuit): Trajeto fechado, ou seja, um caminho onde no h aresta
repetida e os vrtices inicial e nal so idnticos:
(v =)v
0
e
1
v
1
e
2
v
3
. . . v
n1
e
n
v
n
(= w)
onde toda aresta e
i
, 1 i n, distinta e v
0
= v
n
.
7
4
e
2
v
1
3
v
2
e
5
e 6
e
1
v 3
e 4
v
e
e
Um possvel circuito :
v
1
e
6
v
3
e
2
v
4
e
7
v
2
e
1
v
3
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 70
Caminhamentos em grafos
Circuito simples
Circuito simples (Simple circuit): Trajeto fechado, ou seja, um caminho onde
no h arestas e vrtices repetidos, exceto os vrtices inicial e nal que so
idnticos.
7
4
e
2
v
1
3
v
2
e
5
e 6
e
1
v 3
e 4
v
e
e
Um possvel circuito simples :
v
1
e
6
v
3
e
2
v
4
e
7
v
2
e
4
v
1
Um circuito simples tambm chamado de ciclo simples.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 71
Terminologia de caminhamentos
Aresta Vrtice Comea e termina
Tipo repetida? repetido? no mesmo vrtice?
Caminho (walk) Pode Pode Pode
Caminho fechado (closed walk) Pode Pode Sim
Trajeto (path) No Pode Pode
Trajeto simples (simple path) No No No
Circuito (circuit ) No Pode Sim
Circuito simples (simple circuit ) No v
0
= v
n
Sim
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 72
Caminhamentos em grafos
Notao simplicada (1)
Em geral um caminho pode ser identicado de forma no ambgua atravs de
uma seqncia de arestas ou vrtices.
e
3
e
1
e
1
v
2
v
3
v
4
e
2
O caminho e
1
e
2
e
4
e
3
representa de forma no ambgua o caminho
v
1
e
1
v
2
e
2
v
3
e
4
v
3
e
3
v
2
A notao e
1
ambgua, se usada para referenciar um caminho, pois pode
representar duas possibilidades: v
1
e
1
v
2
ou v
2
e
1
v
1
.
A notao v
2
v
3
ambgua, se usada para referenciar um caminho, pois pode
representar duas possibilidades: v
2
e
2
v
3
ou v
2
e
3
v
3
.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 73
Caminhamentos em grafos
Notao simplicada (2)
e
1
v
2
v
3
e
2
e
3
v
1
A notao v
1
v
2
v
2
v
3
, se for associada a um caminho, representa de forma
no ambgua o caminho v
1
e
1
v
2
e
2
v
2
e
3
v
3
Se um grafo G no possui arestas paralelas, ento qualquer caminho em G
pode ser determinado de forma nica por uma seqncia de vrtices.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 74
Identicando o caminhamento (1)
1
e
2
e
3
e
4
e
5
e
7
e
9
e
8
e
1
v 2
v
4
v
3
v
6
e
6
v
5
v
e
10
Que tipo de caminhamento ?
v
1
e
1
v
2
e
3
v
3
e
4
v
3
e
5
v
4
Aresta repetida? No.
Vrtice repetido? Sim v
3
.
Comea e termina no mesmo
vrtice? No.
Trajeto.
e
1
e
3
e
5
e
5
e
6
Aresta repetida? Sim e
5
.
Vrtice repetido? Sim v
3
.
Comea e termina no mesmo
vrtice? No.
Caminho.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 75
Identicando o caminhamento (2)
1
e
2
e
3
e
4
e
5
e
7
e
9
e
8
e
1
v 2
v
4
v
3
v
6
e
6
v
5
v
e
10
Que tipo de caminhamento ?
v
2
v
3
v
4
v
5
v
3
v
6
v
2
Aresta repetida? No.
Vrtice repetido? Sim v
2
e v
3
.
Comea e termina no mesmo
vrtice? Sim v
2
.
Circuito.
v
2
v
3
v
4
v
5
v
6
v
2
Aresta repetida? No.
Vrtice repetido? Sim v
2
.
Comea e termina no mesmo
vrtice? Sim v
2
.
Circuito simples.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 76
Identicando o caminhamento (3)
1
e
2
e
3
e
4
e
5
e
7
e
9
e
8
e
1
v 2
v
4
v
3
v
6
e
6
v
5
v
e
10
Que tipo de caminhamento ?
v
2
v
3
v
4
v
5
v
6
v
3
v
2
Aresta repetida? Sim e
3
.
Vrtice repetido? Sim v
2
e v
3
.
Comea e termina no mesmo
vrtice? Sim v
2
.
Caminho fechado.
v
1
Aresta repetida? No.
Vrtice repetido? No.
Comea e termina no mesmo
vrtice? Sim v
1
.
Caminho (circuito) trivial.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 77
Fecho transitivo direto
Denio: O fecho transitivo direto (FTD) de um vrtice v o conjunto de todos
os vrtices que podem ser atingidos por algum caminho iniciando em v.
Exemplo: O FTD do vrtice v
5
do grafo ao lado
o conjunto v
1
, v
2
, v
3
, v
4
, v
5
, v
6
. Note que
o prprio vrtice faz parte do FTD j que ele
alcanvel partindo-se dele mesmo.
2
v
4
v
6
v
7
v
5
v
3
v
1
v
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 78
Fecho transitivo inverso
Denio: O fecho transitivo inverso (FTI) de um vrtice v o conjunto de todos
os vrtices a partir dos quais se pode atingir v por algum caminho.
Exemplo: O FTI do vrtice v
5
do grafo abaixo
o conjunto v
1
, v
2
, v
4
, v
5
, v
7
. Note que o
prprio vrtice faz parte do FTI j que dele pode
alcanar ele mesmo.
2
v
4
v
6
v
7
v
5
v
3
v
1
v
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 79
Conectividade (1)
Informalmente um grafo conexo (conectado) se for possvel caminhar de qual-
quer vrtice para qualquer outro vrtice atravs de uma seqncia de arestas
adjacentes.
Denio: Seja G um grafo. Dois vrtices v e w de G esto conectados sse
existe um caminho de v para w. Um grafo G conexo sse dado um par qualquer
de vrtice v e w em G, existe um caminho de v para w. Simbolicamente,
G conexo vrtices v, w V (G), um caminho de v para w.
Se a negao desta armao for tomada, possvel ver que um grafo no
conexo sse existem dois vrtices em G que no esto conectados por qualquer
caminho.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 80
Conectividade (2)
5
v
6
v
3
v
4
v
2
v
1
v
1
G
Grafo conexo.
1
v
3
v
2
v
4
v
6
v
8
v
7
v
5
v
2
G
v
3
v
2
v
5
v
4
v
6
v
3
G
1
Grafos no conexos.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 81
Conectividade (3)
Lemas
Seja G um grafo.
(a) Se G conexo, ento quaisquer dois vrtices distintos de G podem ser
conectados por um trajeto simples (simple path).
(b) Se vrtices v e w so parte de um circuito de G e uma aresta removida
do circuito, ainda assim existe um trajeto de v para w em G.
(c) Se G conexo e contm um circuito, ento uma aresta do circuito pode ser
removida sem desconectar G.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 82
Conectividade (4)
Os grafos
1
v
3
v
2
v
4
v
6
v
8
v
7
v
5
v
2
G
v
3
v
2
v
5
v
4
v
6
v
3
G
1
possuem trs partes cada um, sendo cada parte um grafo conexo.
Um componente conexo de um grafo um subgrafo conexo de maior tamanho
possvel.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 83
Componente conexo (1)
Denio: Um grafo H um componente conexo de um grafo G sse:
1. H um subgrafo de G;
2. H conexo;
3. Nenhum subgrafo conexo de GtemH como um subgrafo e contm vrtices
ou arestas que no esto em H.
Um grafo pode ser visto como a unio de seus componentes conexos.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 84
Componente conexo (2)
Os componentes conexos do grafo G abaixo so:
1
v
2
v
3
v
4
v
8
v
6
v
7
v
5
v
1
e
2
e
5
e
3
e
4
e
G possui trs componentes conexos:
H
1
: V
1
= v
1
, v
2
, v
3
E
1
= e
1
, e
2

H
2
: V
2
= v
4
E
2
=
H
3
: V
3
= v
5
, v
6
, v
7
, v
8
E
3
= e
3
, e
4
, e
5

UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 85


Componente fortemente conexo (conectado)
Um grafo dirigido G = (V, E) fortemente conectado se cada dois vrtices
quaisquer so alcanveis a partir um do outro.
Os componentes fortemente conectados de um grafo direcionado so conjuntos
de vrtices sob a relao so mutuamente alcanveis.
Um grafo dirigido fortemente conectado tem apenas um componente forte-
mente conectado.
v
3
v
0
v
1
v
4
v
5
v
2
Os componentes fortemente conectados do grafo ao lado so:
H
1
: V
1
= v
0
, v
1
, v
2
, v
3

H
2
: V
2
= v
4

H
3
: V
3
= v
5

Observe que v
4
, v
5
no um componente fortemente
conectado j que o vrtice v
5
no alcanvel a partir do vr-
tice v
4
.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 86
Circuito Euleriano (1)
Denio: Seja G um grafo. Um circuito Euleriano um circuito que contm
cada vrtice e cada aresta de G. uma seqncia de vrtices e arestas ad-
jacentes que comea e termina no mesmo vrtice de G, passando pelo menos
uma vez por cada vrtice e exatamente uma nica vez por cada aresta de G.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 87
Circuito Euleriano (2)
Teorema: Se um grafo possui um circuito Euleriano, ento cada vrtice do grafo
tem grau par.
Prova:
Suponha que G um grafo que tem um circuito Euleriano. [Deve-se mostrar que
qualquer vrtice v de G tem grau par.]
Seja v um vrtice particular de G mas escolhido aleatoriamente.
O circuito Euleriano possui cada aresta de G incluindo todas as arestas inci-
dentes a v.
Vamos imaginar um caminho que comea no meio de uma das arestas ad-
jacentes ao incio do circuito Euleriano e continua ao longo deste circuito e
termina no mesmo ponto.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 88
Circuito Euleriano (3)
v
2
v
3
v
4
v 5
v
0
1
v
Par de arestas entrada/sada
Par de arestas entrada/sada
Comece aqui
Prova (continuao):
Cada vez que o vrtice v visitado atravs de uma aresta de entrada, este
vrtice deixado j que o caminho termina no meio de uma aresta.
J que cada circuito Euleriano passa em cada aresta de G exatamente uma
nica vez, cada aresta incidente a v visitada uma nica vez neste processo.
Como o caminho que passa por v feito atravs de arestas incidentes a v na
forma de pares entrada/sada, o grau de v deve ser mltiplo de 2.
Isto signica que o grau de v par. [O que devia ser mostrado.]
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 89
Circuito Euleriano (4)
O contrapositivo deste teorema (que logicamente equivalente ao teorema ori-
ginal) :
Teorema: Se algum vrtice de um grafo tem grau mpar, ento o grafo no tem
um circuito Euleriano.
Esta verso do teorema til para mostrar que um grafo no possui um
circuito Euleriano.
e
7
4
e
2
v
1
3
v
2
e
5
e 6
e
1
v 3
e 4
v
e
Vrtices v
1
e v
3
possuem grau 3 e, assim, no possuem um circuito Euleriano.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 90
Circuito Euleriano (5)
Revisitando o problema das sete pontes da cidade de Knigsberg.
A
B
C
D
Problema: possvel que uma pessoa faa um percurso na cidade de tal forma
que inicie e volte a mesma posio passando por todas as pontes somente uma
nica vez?
No. Todos os vrtices tm grau mpar.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 91
Circuito Euleriano (6)
No entanto, se cada vrtice de um grafo tem grau par, ento o grafo tem um
circuito Euleriano?
No. Por exemplo, no grafo abaixo todos os vrtices tm grau par, mas como
o grafo no conexo, no possui um circuito Euleriano.
v
1
v
1
e
2
e
3
v
4
v
3
e
4
e
2
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 92
Circuito Euleriano (7)
Teorema: Se cada vrtice de umgrafo no vazio temgrau par e o grafo conexo,
ento o grafo tem um circuito Euleriano.
Prova: [Esta uma prova construtivista, ou seja, apresenta umalgoritmo para achar umcircuito
Euleriano para um grafo conexo no qual cada vrtice tem grau par.]
Suponha que G um grafo conexo no vazio e que cada vrtice de G tem
grau par. [Deve-se achar um circuito Euleriano para G.]
Construa um circuito C usando o algoritmo descrito a seguir.
PASSO 1:
Escolha qualquer vrtice v de G. [Este passo pode ser executado j que pela su-
posio o conjunto de vrtices de G no vazio.]
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 93
Circuito Euleriano (8)
Prova (continuao):
PASSO 2:
Escolha uma seqncia qualquer de vrtices e arestas adjacentes,
comeando e terminando em v, sem repetir arestas. Chame o circuito resul-
tante de C.
[Este passo pode ser executado pelas seguintes razes:
Como o grau de cada vrtice de G par, possvel entrar num vrtice qualquer que no
seja o v por arestas de entrada e sada no visitadas ainda.
Assim, uma seqncia de arestas adjacentes distintas pode ser obtida enquanto o vrtice v
no seja alcanado.
Esta seqncia de arestas deve voltar em v j que existe um nmero nito de arestas.
]
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 94
Circuito Euleriano (9)
Prova (continuao):
PASSO 3: Verique se C contm cada aresta e vrtice de G. Se sim, C um
circuito Euleriano e o problema est terminado. Caso contrrio, execute os
passos abaixo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 95
Circuito Euleriano (10)
Prova (continuao):
PASSO 3A:
Remova todas as arestas do circuito C do grafo G e quaisquer vrtices que
se tornaram isolados quando as arestas de C so removidas.
Chame o grafo resultante de G
t
.
[Note que G
t
pode no ser conexo, como ilustrado abaixo, mas cada vrtice de G
t
tem grau
par, j que removendo as arestas de C remove um nmero par de arestas de cada vrtice e a
diferena de dois nmeros pares par.]
G:
u
v
w
C
G
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 96
Circuito Euleriano (11)
Prova (continuao):
PASSO 3B:
Escolha qualquer vrtice w comum a ambos C e G
t
.
[Deve haver pelo menos um vrtice deste tipo j que G conexo. Na gura abaixo existem
dois vrtices deste tipo: u e w.]
G:
u
v
w
C
G
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 97
Circuito Euleriano (12)
Prova (continuao):
PASSO 3C:
Escolha uma seqncia qualquer de vrtices e arestas adjacentes,
comeando e terminando em w, sem repetir arestas. Chame o circuito re-
sultante de C
t
.
[Este passo pode ser executado j que o grau de cada vrtice de G
t
par e G
t
nito. Veja a
justicativa para o passo 2.]
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 98
Circuito Euleriano (13)
Prova (continuao):
PASSO 3D:
Agrupe C e C
t
para criar um novo circuito C
tt
como segue:
Comece em v e siga em direo a w.
Percorra todo o circuito C
t
e volte a w.
Caminhe pela parte de C no percorrida ainda at o vrtice v.
[O efeito de executar os passos 3C e 3D para o grafo anterior mostrado abaixo.]
C
u
v
w
G:
C
C
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 99
Circuito Euleriano (14)
Prova (continuao):
PASSO 3E:
Seja C C
tt
e retorne ao passo 3.
[Como o grafo G nito, a execuo dos passos deste algoritmo termina, com a construo de
um circuito Euleriano para G. Como diferentes escolhas podem ser feitas, diferentes circuitos
podem ser gerados.]
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 100
Circuito Euleriano (15)
Determine se o grafo abaixo tem um circuito Euleriano. Em caso positivo ache
um circuito Euleriano para o grafo.
g
i
d
c
e
h
f
j
a
b
Os vrtices a, b, c, f, g, i, j tm grau 2.
Os vrtices d, e, h tm grau 4.
Pelo teorema anterior, este grafo possui um circuito Euleriano.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 101
Circuito Euleriano (16)
Seja v = a e seja
C : abcda.
i
b
g
j
d
c
e
h
f
a
3
1
4
2
C no um circuito Euleriano para este grafo, mas C possui uma interseco
com o restante do grafo no vrtice d.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 102
Circuito Euleriano (17)
Seja C
t
: deghjid. Agrupe C
t
a C para obter
C
tt
: abcdeghjida.
Seja C C
tt
. Ento C pode ser representado pelas arestas rotuladas no grafo
abaixo:
g
d
c
e
h
f
j
i
a
b
2
1
5
3
6
7
8
9
10
4
C no um circuito Euleriano para este grafo, mas C possui uma interseco
com o restante do grafo no vrtice e.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 103
Circuito Euleriano (18)
Seja C
t
: efhe. Agrupe C
t
a C para obter
C
tt
: abcdefheghjida.
Seja C C
tt
. Ento C pode ser representado pelas arestas rotuladas no grafo
abaixo:
i
d
c
e
h
f
j
a
b
g
9 2
4
11
5
10
6
13
7
12
8
1
3
C inclui cada aresta do grafo exatamente uma nica vez e, assim, C um
circuito Euleriano para este grafo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 104
Circuito Euleriano (19)
Teorema: Um grafo G tem um circuito Euleriano sse G conexo e cada vrtice
de G tem grau par.
Denio: Seja G um grafo e seja v e w dois vrtices de G. Um Trajeto Euleri-
ano de v para w uma seqncia de arestas e vrtices adjacentes que comea
emv, termina emw e passa por cada vrtice de Gpelo menos uma vez e passa
por cada aresta de G exatamente uma nica vez.
Corolrio: Seja G um grafo e dois vrtices v e w de G. Existe um trajeto Eule-
riano de v para w sse G conexo e v e w tm grau mpar e todos os outros
vrtices de G tm grau par.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 105
Trajeto Euleriano (1)
Uma casa possui uma diviso representada pela planta abaixo. possvel uma
pessoa sair do cmodo A, terminar no cmodo B e passar por todas as portas
da casa exatamente uma nica vez? Se sim, apresente um possvel trajeto.
K
J
I A
B
C D
G
F
H
E
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 106
Trajeto Euleriano (2)
A planta da casa pode ser representada pelo grafo abaixo:
J
I
E
K
H
F
G
D C
B
A
H
F
G
D C
B
A
J
I
E
K
Cada vrtice deste grafo tem um grau par, exceto os vrtices A e B que tm
grau 1. Assim, pelo corolrio anterior, existe um trajeto Euleriano de A para B.
AGHFEIHEKJDCB
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 107
Circuito Hamiltoniano (1)
William Hamilton (1805
1865), matemtico irlands. Con-
tribuiu para o desenvolvimento da p-
tica, dinmica e lgebra. Em particu-
lar, descobriu a lgebra dos quater-
nions. Seu trabalho provou ser sig-
nicante para o desenvolvimento da
mecnica quntica.
Em 1859, props um jogo na forma de um
dodecaedro (slido de 12 faces).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 108
Circuito Hamiltoniano (2)
Jogo proposto por Hamilton
Cada vrtice recebeu o nome de uma cidade: Londres, Paris, Hong Kong, New
York, etc. O problema era: possvel comear em uma cidade e visitar todas
as outras cidades exatamente uma nica vez e retornar cidade de partida?
O jogo mais fcil de ser imaginado projetando o dodecaedro no plano:
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 109
Circuito Hamiltoniano (3)
Jogo proposto por Hamilton
Uma possvel soluo para este grafo :
Denio: Dado um grafo G, um Circuito Hamiltoniano para G um circuito
simples que inclui cada vrtice de G, ou seja, uma seqncia de vrtices adja-
centes e arestas distintas tal que cada vrtice de G aparece exatamente uma
nica vez.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 110
Comentrios sobre circuitos Euleriano e
Hamiltoniano (1)
Circuito Euleriano:
Inclui todas as arestas uma nica vez.
Inclui todos os vrtices, mas que podem ser repetidos, ou seja, pode no
gerar um circuito Hamiltoniano.
Circuito Hamiltoniano:
Inclui todas os vrtices uma nica vez (exceto o inicial = nal).
Pode no incluir todas as arestas, ou seja, pode no gerar um circuito
Euleriano.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 111
Comentrios sobre circuitos Euleriano e
Hamiltoniano (2)
possvel determinar a priori se um grafo G possui um circuito Euleriano.
No existe um teorema que indique se um grafo possui um circuito Hamil-
toniano nem se conhece um algoritmo eciente (polinomial) para achar um
circuito Hamiltoniano.
No entanto, existe uma tcnica simples que pode ser usada em muitos casos
para mostrar que um grafo no possui um circuito Hamiltoniano.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 112
Determinando se um grafo no possui um circuito
Hamiltoniano (1)
Suponha que um grafo G tenha um circuito Hamiltoniano C dado por:
C : v
0
e
1
v
1
e
2
. . . v
n1
e
n
v
n
Como C um circuito simples, todas as arestas e
i
so distintas e todos os
vrtices so distintos, exceto v
0
= v
n
.
Seja H um subgrafo de G que formado pelos vrtices e arestas de C, como
mostrado na gura abaixo (H o subgrafo com as linhas grossas).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 113
Determinando se um grafo no possui um circuito
Hamiltoniano (2)
Se um grafo G tem um circuito Hamiltoniano ento G tem um subgrafo H com
as seguintes propriedades:
1. H contm cada vrtice de G;
2. H conexo;
3. H tem o mesmo nmero de arestas e
de vrtices;
4. Cada vrtice de H tem grau 2.
Contrapositivo desta armao:
Se um grafo G no tem um subgrafo H com propriedades (1)(4) ento G
no possui um circuito Hamiltoniano.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 114
Determinando se um grafo no possui um circuito
Hamiltoniano (3)
Prove que o grafo G abaixo no tem um circuito Hamiltoniano.
a
e
c
d
b
Se G tem um circuito Hamiltoniano, ento G tem um subgrafo H que:
1. H contm cada vrtice de G;
2. H conexo;
3. H tem o mesmo nmero de arestas e de vrtices;
4. Cada vrtice de H tem grau 2.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 115
Determinando se um grafo no possui um circuito
Hamiltoniano (4)
a
e
c
d
b
Em G, grau(b) = 4 e cada vrtice de H tem grau 2;
Duas arestas incidentes a b devem ser removidas de G para criar H;
Qualquer aresta incidente a b que seja removida far com que os outros vr-
tices restantes tenham grau menor que 2;
Conseqentemente, no existe um subgrafo H com as quatro propriedades
acima e, assim, G no possui um circuito Hamiltoniano.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 116
O Problema do Caixeiro Viajante (1)
Em ingls, Traveling Salesman Problem, ou TSP.
Suponha o mapa abaixo mostrando quatro cidades (A, B, C, D) e as distn-
cias em km entre elas.
A
C
D
B
40
50 35
25
30
30
Um caixeiro viajante deve percorrer um circuito Hamiltoniano, ou seja, visitar
cada cidade exatamente uma nica vez e voltar a cidade inicial.
Que rota deve ser escolhida para minimizar o total da distncia percorrida?
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 117
O Problema do Caixeiro Viajante (2)
Possvel soluo:
Enumere todos os possveis circuitos Hamiltonianos comeando e termi-
nando em A;
Calcule a distncia de cada um deles;
Determine o menor deles.
Rota Distncia (km)
ABCDA 30 +30 +25 +40 = 125
ABDCA 30 +35 +25 +50 = 140
ACBDA 50 +30 +35 +40 = 155
ACDBA 50 +25 +35 +30 = 140
ADBCA 40 +35 +30 +50 = 155
ADCBA 40 +25 +30 +30 = 125
A
C
D
B
40
50 35
25
30
30
Assim, tanto a rota ABCDA ou ADCBA tem uma distncia total de 125
km.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 118
O Problema do Caixeiro Viajante (3)
A soluo do TSP um circuito Hamiltoniano que minimiza a distncia to-
tal percorrida para um grafo valorado arbitrrio G com n vrtices, onde uma
distncia atribuda a cada aresta.
Algoritmo para resolver o TSP:
Atualmente, fora bruta, como feito no exemplo anterior.
Problema da classe NP-Completo.
Exemplo: para o grafo K
30
existem
29! 8, 84 10
30
circuitos Hamiltonianos diferentes comeando e terminando numdeterminado
vrtice.
Mesmo se cada circuito puder ser achado e calculado em apenas 1s, seria
necessrio aproximadamente 2, 8 10
17
anos para terminar a computao
nesse computador.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 119
Representao de um grafo
Dado um grafo G = (V, E):
V = conjunto de vrtices.
E = conjunto de arestas, que pode ser representado pelo subconjunto de
V V .
O tamanho da entrada de dados medido em termos do:
Nmero de vrtices [V [.
Nmero de arestas [E[.
Se G conexo ento [E[ [V [ 1.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 120
Representao de um grafo
Convenes
Conveno I (Notao):
Dentro e somente dentro da notao assinttica os smbolos V e E signi-
cam respectivamente [V [ e [E[.
Se um algoritmo executa em tempo O(V +E) equivalente a dizer que
executa em tempo O([V [ +[E[).
Conveno II (Em pseudo-cdigo):
O conjunto V de vrtices de G representado por V [G].
O conjunto E de arestas de G representado por E[G].
Os conjuntos V e E so vistos como atributos de G.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 121
Representao de um grafo
Estruturas de dados
Matriz de adjacncia:
Forma preferida de representar grafos densos ([E[ [V [
2
).
Indica rapidamente (O(1)) se existe uma aresta conectando dois vrtices.
Lista de adjacncia:
Representao normalmente preferida.
Prov uma forma compacta de representar grafos esparsos ([E[ _ [V [
2
).
As duas formas principais de representar um grafo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 122
Representao de um grafo
Matriz de adjacncia e grafo dirigido (1)
Seja o grafo dirigido abaixo:
e
1
e
2
e
4
e
5
e
6
e
1
v
2
v
3
v
3
Este grafo pode ser representado por uma ma-
triz A = (a
ij
), onde (a
ij
) representa o nmero
de arestas de v
i
para v
j
.
Matriz de Adjacncia
v
1
v
2
v
3
v
1
A = v
2
v
3
_

_
1
1
1
0
1
0
0
2
0
_

_
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 123
Representao de um grafo
Matriz de adjacncia e grafo dirigido (2)
Denio: Seja G um grafo dirigido com vrtices v
1
, v
2
, . . . , v
n
. A matriz de
adjacncia de G a matriz A = (a
ij
) (A[1. . . n, 1. . . n]) denida como:
a
ij
= # de arestas de v
i
para v
j
, i, j = 1, 2, . . . , n.
Valor diferente de zero na diagonal principal: lao.
Valor igual a 1 na entrada (a
ij
): uma nica aresta de v
i
a v
j
.
Valores maiores que 1 na entrada (a
ij
): arestas paralelas de v
i
a v
j
.
Espao: O(V
2
).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 124
Representao de um grafo
Matriz de adjacncia e grafo dirigido (3)
v
3
v
1
e
2
e
3
e
4
e
5
e
2
v
1
v
1
v
2
v
3
v
1
A = v
2
v
3
_

_
0
0
2
0
1
1
0
1
0
_

_
v
1
e
2
e
3
e
4
e
5
e
1
v
3
v
2
v
1
v
2
v
3
v
1
A = v
2
v
3
_

_
1
1
0
1
0
0
0
2
0
_

_
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 125
Representao de um grafo
Matriz de adjacncia e grafo dirigido (4)
Dada a matriz de adjacncia de um
grafo:
v
1
v
2
v
3
v
4
A =
v
1
v
2
v
3
v
4
_

_
0
1
0
2
1
1
0
1
1
0
1
0
0
2
1
0
_

_
Um possvel desenho deste grafo :
v
1
v
4
v
3
v
2
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 126
Representao de um grafo
Matriz de adjacncia e grafo no dirigido
Denio: Seja G um grafo no dirigido com vrtices v
1
, v
2
, . . . , v
n
. A matriz
de adjacncia de G a matriz A = (a
ij
) sobre o conjunto dos inteiros no
negativos tal que
a
ij
= # de arestas conectando v
i
a v
j
, i, j = 1, 2, . . . , n.
Dado o grafo:
5
e
4
e
4
v
2
v
3
v
1
v
1
e
7
e
2
e
3
e
6
e
A matriz de adjacncia correspon-
dente :
v
1
v
2
v
3
v
4
A =
v
1
v
2
v
3
v
4
_

_
0
1
0
1
1
1
2
1
0
2
0
0
1
1
0
1
_

_
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 127
Representao de um grafo
Matriz de adjacncia e componentes conexos
Dado o grafo:
1
v
3
v
2
v
3
e
2
e
4
e
1
e
5
v
4
v
6
e
5
e
7
v
6
v
7
e
8
e
A matriz de adjacncia correspondente :
A =
_

_
1 0 1 0 0 0 0
0 0 2 0 0 0 0
1 2 0 0 0 0 0
0 0 0 0 1 0 0
0 0 0 1 1 0 0
0 0 0 0 0 0 2
0 0 0 0 0 2 0
_

_
A matriz A consiste de blocos de diferentes tamanhos
ao longo da diagonal principal, j que o conjunto de vr-
tices disjunto.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 128
Representao de um grafo
Matriz de adjacncia: Anlise
Deve ser utilizada para grafos densos, onde [E[ prximo de [V [
2
([E[
[V [
2
).
O tempo necessrio para acessar um elemento independente de [V [ ou [E[.
muito til para algoritmos emque necessitamos saber comrapidez se existe
uma aresta ligando dois vrtices.
A maior desvantagem que a matriz necessita O(V
2
) de espao.
Ler ou examinar a matriz tem complexidade de tempo O(V
2
).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 129
Representao de um grafo
Uso de matriz de adjacncia
Quando usada, a maior parte dos algoritmos requer tempo O(V
2
), mas exis-
tem excees.
Seja umgrafo dirigido que contmumvrtice sink, ou seja, umvrtice com:
Grau de entrada (in-degree) = [V [ 1
Grau de sada (out-degree) = 0
No existe uma aresta loop
Apresente um algoritmo para determinar se um grafo dirigido possui um vr-
tice sink em tempo O(V ) usando uma matriz de adjacncia.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 130
Representao de um grafo
Nmero de vrtices sink num grafo dirigido
Quantos vrtices sink um grafo dirigido G = (V, E) possui no mximo?
No mximo 1.
Prova por contradio:
Suponha que s
i
e s
j
sejam vrtices sink.
Deve existir uma aresta de todos os ns do grafo G para s
i
e s
j
, exceto loops.
Em particular deve existir uma aresta (s
i
, s
j
) e uma aresta (s
j
, s
i
) j que s
i
e s
j
so vrtices sink.
Isto no pode ocorrer j que o grau de sada de um vrtice sink 0.
Logo, se existir um vrtice sink no grafo G no mximo 1.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 131
Representao de um grafo
Lista de adjacncia
Vetor Adj de [V [ listas, uma para cada vrtice de V .
Para cada vrtice u V , a lista Adj [u] contm apontadores para todos os
vrtices v tal que a aresta (u, v) E (todos os vrtices adjacentes a u em
G).
Denio vale para grafos no dirigidos e dirigidos.


[V [
i=1
comprimento da lista de adjacncia, vale:
Grafo dirigido = [E[, cada aresta aparece uma nica vez na lista.
Grafo no dirigido = 2[E[, cada aresta aparece duas vezes na lista (entrada
de u e entrada de v).
Espao: O(V +E).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 132
Representao de um grafo
Lista de adjacncia e grafo dirigido (1)
Seja o grafo dirigido abaixo:
e
1
e
2
e
4
e
5
e
6
e
1
v
2
v
3
v
3
Este grafo pode ser representado por uma lista
de adjacncia Adj :
Adj [v
1
] = [v
1
]
Adj [v
2
] = [v
1
, v
2
, v
3
, v
3
]
Adj [v
3
] = [v
1
]
Adj
v
3
v
1
v
1
v
1
v
3
v
3
v
2
v
1
v 2
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 133
Representao de um grafo
Lista de adjacncia e grafo dirigido (2)
v
3
v
1
e
2
e
3
e
4
e
5
e
2
v
1
Este grafo pode ser representado
pela lista de adjacncia:
Adj [v
1
] = []
Adj [v
2
] = [v
2
, v
3
]
Adj [v
3
] = [v
1
, v
1
, v
2
]
v
1
e
2
e
3
e
4
e
5
e
1
v
3
v
2
Este grafo pode ser representado
pela lista de adjacncia:
Adj [v
1
] = [v
1
, v
2
]
Adj [v
2
] = [v
1
, v
3
, v
3
]
Adj [v
3
] = []
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 134
Representao de um grafo
Lista de adjacncia e grafo no dirigido
Dado o grafo:
5
e
4
e
4
v
2
v
3
v
1
v
1
e
7
e
2
e
3
e
6
e
Uma lista de adjacncia correspon-
dente :
Adj [v
1
] = [v
2
, v
4
]
Adj [v
2
] = [v
1
, v
2
, v
3
, v
3
, v
4
]
Adj [v
3
] = [v
2
, v
2
]
Adj [v
4
] = [v
1
, v
2
, v
4
]
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 135
Contando caminhos de tamanho n (1)
O tamanho (comprimento) de um caminho o nmero de arestas do mesmo,
ou seja, nmero de vrtices menos um.
Dado o grafo
3
e
4
e
2
v
3
v
1
v
1
e
2
e
O caminho
v
2
e
3
v
3
e
4
v
2
e
2
v
2
e
3
v
3
tem tamanho 4.
Quantos caminhos distintos de tamanho 2 exis-
tem conectando v
2
a v
2
?
v
2
e
1
v
1
e
1
v
2
v
2
e
2
v
2
e
2
v
2
v
2
e
3
v
3
e
4
v
2
v
2
e
4
v
3
e
3
v
2
v
2
e
3
v
3
e
3
v
2
v
2
e
4
v
3
e
4
v
2
Existem seis caminhos
distintos.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 136
Contando caminhos de tamanho n (2)
Quantos caminhos distintos de tamanho n existem conectando dois vrtices de
um dado grafo G?
Este valor pode ser computado usando multiplicao de matrizes.
Seja o grafo:
3
e
4
e
2
v
3
v
1
v
1
e
2
e
A matriz de adjacncia correspondente :
v
1
v
2
v
3
v
1
A = v
2
v
3
_

_
0
1
0
1
1
2
0
2
0
_

_
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 137
Contando caminhos de tamanho n (3)
O valor de A
2
dado por:
_

_
0 1 0
1 1 2
0 2 0
_

_
_

_
0 1 0
1 1 2
0 2 0
_

_ =
_

_
1 1 2
1 6 2
2 2 4
_

_
Observe que a
22
= 6, que o nmero de caminhos
de tamanho 2 de v
2
para v
2
.
3
e
4
e
2
v
3
v
1
v
1
e
2
e
Se A a matriz de adjacncia de um grafo G, a entrada a
ij
da matriz A
2
indica a quantidade de caminhos de tamanho 2 conectando v
i
a v
j
no grafo
G.
Este resultado vlido para caminhos de tamanho n calculando A
n
.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 138
Isomorsmo de grafos (1)
Os desenhos abaixo
1
v
2
v
3
v
4
v
5
v
1
e
5
e
4
e
2
e
3
e
v
4
v
2
v
5
v
3
v
1
e
2
e
3
e
4
e
5
e
1
representam o mesmo grafo G:
Conjuntos de vrtices e arestas so idnticos;
Funes arestavrtice so as mesmas.
Grafos isomorfos (do grego, o que signica a mesma forma).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 139
Isomorsmo de grafos (2)
G G
t
1
v
2
v
3
v
4
v
5
v
1
e
5
e
4
e
2
e
3
e
1
v
3
v
5
v
4
v
2
v
1
e
4
e
2
e
3
e
5
e
Vrtices de
v
1
v
2
v
3
v
4
v
5
v
1
v
3
v
4
v
5
v
Vrtices de G G
2
G
e
1
e
2
e
3
e
4
e
5
e
1
e
3
e
4
e
5
e
Arestas de Arestas de G
2
Estes grafos so diferentes
apesar de possurem os
mesmos conjuntos de vr-
tices e arestas.
As funes arestavrtice
no so as mesmas.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 140
Isomorsmo de grafos (3)
Denio: Sejam os grafos G e G
t
com conjuntos de vrtices V (G) e V (G
t
)
e com conjuntos de arestas E(G) e E(G
t
), respectivamente. O grafo G
isomorfo ao grafo G
t
sse existem correspondncias um-para-um
g : V (G) V (G
t
)
h : E(G) E(G
t
)
que preservam as funes aresta-vrtice de G e G
t
no sentido que
v V (G) e E(G)
v um n terminal de e g(v) um n terminal de h(e).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 141
Isomorsmo de grafos (4)
Os grafos
G G
t
v
3
v
4
v
1
e
4
e
5
e
7
e
6
e
2
v
5
v
3
e
2
e
1
w
5
w
2
f
2
w
4
f
5
f
3
f
7
f
1
f
3
w
4
w
6
f
1
so isomorfos?
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 142
Isomorsmo de grafos (5)
Para resolver este problema,
devemos achar funes
g : V (G) V (G
t
)
e
h : E(G) E(G
t
)
tal que exista a correspon-
dncia como mencionado
anteriormente.
Grafos G e G
t
so iso-
morfos.
G G
t
v
3
v
4
v
1
e
4
e
5
e
7
e
6
e
2
v
5
v
3
e
2
e
1
w
5
w
2
f
2
w
4
f
5
f
3
f
7
f
1
f
3
w
4
w
6
f
1
g
w
1
v
2
v
3
v
4
v
5
v
1
w
3
w
4
w
5
w
V(G) V(G)
2
E(G)
f
1
e
2
e
3
e
4
e
5
e
1
f
3
f
4
f
5
f
7
e
6
e
6
f
7
f
h
E(G)
2
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 143
Isomorsmo de grafos (6)
Os grafos
G G
t
v
2
v
3
v
4
v
5
v
0
v
2
e
3
e
1
e
4
e
6
e
5
e
7
e
0
e
10
e
9
e
11
e
8
e
7
v
6
v
1
w
2
w
3
w
7
w
4
w
0
w
0
f
1
f
2
f
3
f
4
f
5
f
6
f
7
e
8
f
9
f
10
f
11
f
5
w
6
w
1
so isomorfos?
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 144
Isomorsmo de grafos (7)
Para resolver este problema,
devemos achar funes
g : V (G) V (G
t
)
e
h : E(G) E(G
t
)
tal que exista a correspon-
dncia como mencionado
anteriormente.
Grafos G e G
t
so iso-
morfos.
G G
t
v
2
v
3
v
4
v
5
v
0
v
2
e
3
e
1
e
4
e
6
e
5
e
7
e
0
e
10
e
9
e
11
e
8
e
7
v
6
v
1
w
2
w
3
w
7
w
4
w
0
w
0
f
1
f
2
f
3
f
4
f
5
f
6
f
7
e
8
f
9
f
10
f
11
f
5
w
6
w
1
V(G)
w
1
v
2
v
3
v
4
v
5
v
1
w
3
w
4
w
5
w
6
v
6
w
g
0
v
0
w
V(G)
2
E(G)
e
7
e
8
e
9
e
10
e
11
e
0
e
1
e
2
e
4
e
5
e
3
e
7
f
6
f
8
f
9
f
10
f
11
f
1
f
0
f
2
f
3
f
4
f
5
f
h
E(G)
6
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 145
Isomorsmo de grafos (8)
Isomorsmo de grafos uma relao de equivalncia no conjunto de grafos.
Informalmente, temos que esta propriedade :
Reexiva: Um grafo isomorfo a si prprio.
Simtrica: Se um grafo G isomorfo a um grafo G
t
ento G
t
isomorfo a
G.
Transitiva: Se um grafo G isomorfo a um grafo G
t
e G
t
isomorfo a G
tt
ento G isomorfo a G
tt
.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 146
Representantes de classes de isomorsmo (1)
Ache todos os grafos no isomorfos que tm dois vrtices e duas arestas.
(a) (b) (c) (d)
Existe um algoritmo que aceita como entrada os grafos Ge G
t
e produz como
resultado uma armao se estes grafos so isomorfos ou no?
Sim. Gere todas as funes g e h e determine se elas preservam as
funes arestavrtice de G e G
t
.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 147
Representantes de classes de isomorsmo (2)
Se G e G
t
tm cada um n vrtices e m arestas, o nmero de funes g n!
e o nmero de funes h m!, o que d um nmero total de n! m! funes.
Exemplo para n = m = 20.
Temos 20! 20! 5, 9 10
36
pares a vericar.
Assumindo que cada combinao possa ser achada e calculada em ape-
nas 1s, seria necessrio aproximadamente 1, 9 10
23
anos para termi-
nar a computao nesse computador.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 148
Invariantes para isomorsmo de grafos (1)
Teorema: Cada uma das seguintes propriedades uma invariante para isomor-
smo de dois grafos G e G
t
, onde n, m e k so inteiros no negativos:
1. Tem n vrtices;
2. Tem m arestas;
3. Tem um vrtice de grau k;
4. Tem m vrtices de grau k;
5. Tem um circuito de tamanho k;
6. Tem um circuito simples de tamanho k;
7. Tem m circuitos simples de tamanho k;
8. conexo;
9. Tem um circuito Euleriano;
10. Tem um circuito Hamiltoniano.
Isto signica que se G isomorfo a G
t
ento se Gtem uma destas propriedades
G
t
tambm tem.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 149
Invariantes para isomorsmo de grafos (2)
Os grafos
G G
so isomorfos?
No. G tem nove arestas e G
t
tem oito arestas.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 150
Invariantes para isomorsmo de grafos (3)
Os grafos
H H
so isomorfos?
No. H tem um vrtice de grau 4 e H
t
no tem.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 151
Isomorsmo de grafos simples (1)
Denio: Se G e G
t
so grafos simples (sem arestas paralelas e sem laos)
ento G isomorfo a G
t
sse existe uma correspondncia g um-para-um do
conjunto de vrtices V (G) de G para o conjunto de vrtices V (G
t
) de G
t
que
preserva a funo arestavrtice de G e de G
t
no sentido que
vrtices u, v G
uv uma aresta de G g(u), g(v) uma aresta de G
t
.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 152
Isomorsmo de grafos simples (2)
Os grafos
z
b
c
d
a w y
G G
x
so isomorfos?
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 153
Isomorsmo de grafos simples (3)
z
b
c
d
a w y
G G
x
Sim, so isomorfos.
z
V(G) V(G)
g
a
b
c
d
w
x
y
A funo g preserva a funo arestavrtice
de G e de G
t
:
Arestas de G Arestas de G
t
ab yw = g(a), g(b)
ac yx = g(a), g(c)
ad yz = g(a), g(d)
cd xz = g(c), g(d)
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 154
rvore
Denio: Uma rvore (tambm chamada de rvore livre) um grafo no di-
rigido acclico e conexo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 155
Floresta
Denio: Uma oresta um grafo no dirigido acclico podendo ou no ser
conexo.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 156
rvore geradora (1)
Suponha que uma companhia
area recebeu permisso para voar
nas seguintes rotas:
C
D
N
S L
I
M
A
No entanto, por questes de econo-
mia, esta empresa ir operar ape-
nas nas seguintes rotas:
C
D
N
S L
I
M
A
Este conjunto de rotas interconecta
todas as cidades.
Este conjunto de rotas mnimo?
Sim! Qualquer rvore deste grafo possui oito vrtices e sete arestas.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 157
rvore geradora (2)
Denio: Uma rvore geradora de um grafo G um grafo que contm cada
vrtice de G e uma rvore.
Esta denio pode ser estendida para oresta geradora.
Proposio:
Cada grafo conexo tem uma rvore geradora.
Duas rvores geradores quaisquer de um grafo tm a mesma quantidade
de arestas.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 158
rvore geradora (3)
Seja o grafo G abaixo
v
0
v
2
v
3
v
4
v
5
v
1
Este grafo possui o circuito v
2
v
1
v
4
v
2
.
A remoo de qualquer uma das trs arestas do
circuito leva a uma rvore.
Assim, todas as trs rvores geradoras so:
v
0
v
2
v
3
v
4
v
5
v
1
v
0
v
2
v
3
v
4
v
5
v
1
v
0
v
2
v
3
v
4
v
5
v
1
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 159
rvore geradora mnima ou
Minimal Spanning Tree (1)
O grafo de rotas da companhia
area que recebeu permisso para
voar pode ser rotulado com as dis-
tncias entre as cidades:
83
D
N
S
I
M
A
C
695
242
355
74
262
269
348
306
230
151
L
Suponha que a companhia deseja
voar para todas as cidades mas u-
sando um conjunto de rotas que
minimiza o total de distncias per-
corridas:
230
D
N
S
I
M
A
C
242
355
74
262
151
L
83
Este conjunto de rotas interconecta
todas as cidades.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 160
rvore geradora mnima (2)
Denio: Um grafo com peso um grafo onde cada aresta possui um peso
representado por um nmero real. A soma de todos os pesos de todas as
arestas o peso total do grafo. Uma rvore geradora mnima para um grafo
com peso uma rvore geradora que tem o menor peso total possvel dentre
todas as possveis rvores geradoras do grafo.
Se G um grafo com peso e e uma aresta de G ento:
w(e) indica o peso da aresta e, e
w(G) indica o peso total do grafo G.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 161
Algoritmos para obter a rvore geradora mnima
Algoritmo de Kruskal.
Algoritmo de Prim.
Grafo inicial:
83
D
N
S
I
M
A
C
695
242
355
74
262
269
348
306
230
151
L
rvore geradora mnima:
230
D
N
S
I
M
A
C
242
355
74
262
151
L
83
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 162
Algoritmo de Kruskal (1)
Idia bsica:
Seleciona a aresta de menor peso que conecta duas rvores de uma o-
resta.
Repita o processo at que todos os vrtices estejam conectados sempre
preservando a invariante de se ter uma rvore.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 163
Algoritmo de Kruskal (2)
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 164
Algoritmo de Kruskal (3)
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 165
Algoritmo de Prim
Idia bsica:
Tomando como vrtice ini-
cial A, crie uma la de priori-
dades classicada pelos pe-
sos das arestas conectando
A.
Repita o processo at que
todos os vrtices tenham
sido visitados.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 166
Algoritmos de pesquisa em grafo
Objetivo:
Pesquisa sistemtica de cada aresta e vrtice de um grafo.
Grafo G = (V, E) pode ser tanto dirigido quanto no dirigido.
Os algoritmos apresentados assumem que a estrutura de dados utilizada
uma lista de adjacncia.
Exemplos de algoritmos de pesquisa em grafo:
Pesquisa em profundidade (Depth-rst search DFS).
Pesquisa em largura (Breadth-rst search BFS).
Aplicaes:
Computao grca.
Tcnicas de vericao formal.
Compiladores.
Resoluo de problemas.
. . .
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 167
Pesquisa em largura (1)
Seja um grafo G = (V, E) e um vrtice origem s.
Pesquisa em largura:
Descobre as arestas em G que so alcanveis a partir de s.
Computa a distncia (em n
o
de arestas) de s para os vrtices que so
alcanveis.
Produz uma rvore em largura com raiz s e seus vrtices alcanveis.
Se v um vrtice alcanvel a partir de s, ento o caminho entre s e v na
rvore corresponde ao caminho mais curto entre s e v no grafo G.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 168
Pesquisa em largura (2)
Expande a fronteira entre vrtices descobertos e no descobertos uniforme-
mente atravs da extenso (largura) da fronteira.
Pesquisa descobre todos os vrtices que esto a distncia k antes de desco-
brir os vrtices a distncia k +1.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 169
Algoritmo para calcular BFS (1)
Estruturas de dados:
Grafo representado como uma lista de adjacncia.
Vetor color [u]: cor de cada vrtice u V .
Vetor [u]: predecessor de cada vrtice u V . Se u no tem predecessor
ou ainda no foi descoberto ento [u] = nil.
Vetor d[u]: distncia de cada vrtice u V ao vrtice s.
Fila Q: contm os vrtices j descobertos em largura.
Cores dos vrtices:
white: no visitados ainda.
gray: vrtice descoberto mas que no teve a sua lista de adjacncia total-
mente examinada.
black: vrtice descoberto que j teve a sua lista de adjacncia totalmente
examinada.
garantir que a pesquisa caminha em largura
Funes:
Enqueue e Dequeue: operaes sobre uma la FIFO.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 170
Algoritmo para calcular BFS (2)
BFS(G, s)
1 for each vertex u V [G] s
2 do color [u] white
3 d[u]
4 [u] nil
5 color [s] gray
6 d[s] 0
7 [s] nil
8 Q s
9 while Q ,=
10 do u head[Q]
11 for each v Adj [u]
12 do if color [v] = white
13 then color [v] gray
14 d[v] d[u] + 1
15 [v] u
16 Enqueue(Q, v)
17 Dequeue(Q)
18 color [u] black
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 171
Comentrios e anlise do algoritmo (1)
1 for each vertex u V [G] s
2 do color [u] white
3 d[u]
4 [u] nil
Linhas 14: Inicializao I
Inicializao de cada vrtice para white (no des-
coberto).
Distncia para o vrtice s como .
Predecessor do vrtice desconhecido.
Anlise:
Linhas 14: O(V ).
Cada vrtice (exceto s) inicializado como white
e nenhum vrtice volta a ser white.
5 color [s] gray
6 d[s] 0
7 [s] nil
8 Q s
Linhas 58: Inicializao II
Inicializao de s com gray ( considerado desco-
berto).
Distncia para o prprio vrtice s 0.
No possui predecessor.
A la Q contm inicialmente apenas s (ir conter
apenas os vrtices gray, ou seja, os vrtices des-
cobertos em largura).
Anlise:
Linhas 58: O(1).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 172
Comentrios e anlise do algoritmo (2)
9 while Q ,=
10 do u head[Q]
11 for each v Adj [u]
12 do if color [v] = white
13 then color [v] gray
14 d[v] d[u] + 1
15 [v] u
16 Enqueue(Q, v)
17 Dequeue(Q)
18 color [u] black
Linhas 918: Loop
Loop executado at que a la esteja vazia, ou
seja, no hajam vrtices gray.
Cada vrtice colocado e retirado da la somente
uma nica vez.
Vrtice gray um vrtice que foi descoberto mas
a sua lista de adjacncia ainda no foi totalmente
descoberta.
Vrtice black j foi totalmente examinado.
Vrtice u contm o primeiro elemento da la Q.
Linhas 1116 examinam cada vrtice v adjacente
a u que no foi descoberto ainda (white (12)),
marca como descoberto (gray (13)), calcula a sua
distncia at s (14), marca o seu predecessor
como u (15), e o coloca na la Q (16).
Quando todos os vrtices adjacentes a u forem
examinados, u retirado da la Q (17) e passa a
ser black (18).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 173
Comentrios e anlise do algoritmo (3)
9 while Q ,=
10 do u head[Q]
11 for each v Adj [u]
12 do if color [v] = white
13 then color [v] gray
14 d[v] d[u] + 1
15 [v] u
16 Enqueue(Q, v)
17 Dequeue(Q)
18 color [u] black
Anlise:
Operaes de colocar e retirar da la cada vrtice
O(1) e o tempo total relacionado com as opera-
es de la O(V ).
A lista de adjacncia de cada vrtice u percor-
rida somente uma nica vez quando esse vrtice
ser retirado de Q.
A soma dos comprimentos das las de adjacncia
O(E), assim como o tempo para percorr-la.
Linhas 918: O(V +E), que o custo das oper-
aes associadas la e a percorrer as listas de
adjacncia.
Anlise de todo algoritmo:
Linhas 14: O(V ).
Linhas 58: O(1).
Linhas 918: O(V +E).
Custo total: O(V +E).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 174
Execuo do algoritmo BFS (1)
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 175
Execuo do algoritmo BFS (2)
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 176
Execuo do algoritmo BFS (3)
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 177
Caminho mais curto
BFS calcula a distncia (em n
o
de arestas) de s V para os vrtices que so
alcanveis em G = (V, E).
Caminho mais curto (s, v):
Nmero mnimo de arestas em qualquer caminho de s para v, no caso de
ser alcanvel, ou se no for.
d[v] = (s, v), para todo v V .
Caminho mais curto entre s e v.
Teorema: Sub-caminhos de caminhos mais curtos so caminhos mais cur-
tos.
Prova: Se algum sub-caminho no gerar o caminho mais curto, ele poderia
ser substitudo por um sub-caminho atalho e gerar um caminho total
mais curto.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 178
Inequao triangular
Teorema: (u, v) (u, x) +(x, v).
Caminho mais curto u ; v no mais longo que qualquer outro caminho
u ; v em particular o caminho concatenando o caminho mais curto
u ;x com o caminho mais curto x ;v.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 179
rvore em largura (1)
BFS produz uma rvore em largura com raiz s e seus vrtices alcanveis.
rvore representada pelo vetor .
Seja o grafo G = (V, E) e o vrtice origem s. O sub-grafo predecessor de G
denido como G

= (V

, E

), onde
V

= v V [ [v] ,= nil s
e
E

= ([v], v) E[ v V

s
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 180
rvore em largura (2)
O sub-grafo predecessor G

uma rvore em largura se:


V

consiste dos vrtices alcanveis a partir de s, v V

.
um caminho simples nico de s a v emG

que tambm o caminho mais


curto de s a v em G.
[E

[ = [V

[ 1.
BFS constri o vetor tal que sub-grafo predecessor G

uma rvore em
largura.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 181
Imprime caminho mais curto
Print-Path(G, s, v)
1 if v = s
2 then print s
3 else if [v] = nil
4 then print no path from s to v exists
5 else Print-Path(G, s, [v])
6 print v
Anlise:
Executa em tempo O(V ).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 182
Pesquisa em profundidade (1)
Seja um grafo G = (V, E)
Pesquisa em profundidade:
Explora os vrtices do grafo a partir de arestas no exploradas ainda, mais
fundo no grafo quanto possvel.
Quando todas as arestas de v tiverem sido exploradas, a pesquisa volta
para explorar outras arestas do vrtice do qual v foi descoberto.
Processo continua at que todos os vrtices alcanveis a partir de uma
origem tenham sido descobertos.
Se existe vrtice no descoberto ainda ento um novo vrtice sele-
cionado e o processo comea todo novamente.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 183
Pesquisa em profundidade (2)
v v
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 184
Algoritmo para calcular DFS (1)
Estruturas de dados:
Grafo representado como uma lista de adjacncia.
Vetor color [u]: cor de cada vrtice u V .
Vetor [u]: predecessor de cada vrtice u V . Se u no tem predecessor
ou ainda no foi descoberto ento [u] = nil.
Vetor d[1. . . [V []: marca quando o vrtice descoberto
(white gray).
Vetor f[1. . . [V []: marca quando o vrtice terminado
(gray black).
Varivel global time: indica o instante em que o vrtice descoberto e
terminado, ou seja, o timestamp.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 185
Algoritmo para calcular DFS (2)
Cores dos vrtices:
white: no visitados ainda.
gray: vrtice descoberto mas que no teve a sua lista de adjacncia total-
mente examinada.
black: vrtice descoberto que j teve a sua lista de adjacncia totalmente
examinada e est terminado.
Funo:
DFS-Visit: Percorre recursivamente o grafo em profundidade.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 186
Algoritmo para calcular DFS (3)
Vetores d e f indicam os timestamps de descoberta e trmino do vrtice.
Valores dos timestamps esto entre 1 e 2[V [
u V, um nico evento de descoberta e um nico evento de trmino.
u V, d[u] f[u] d[u] < f[u]
u V , tempo lgico:
d[u]
d[u]
f[u]
f[u]
white
gray
black
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 187
Algoritmo para calcular DFS (4)
DFS(G)
1 for each vertex u V [G]
2 do color [u] white
3 [u] nil
4 time 0
5 for each vertex u V [G]
6 do if color [u] = white
7 then DFS-Visit(u)
DFS-Visit(u)
1 color [u] gray
2 d[u] time time +1
3 for each v Adj [u]
4 do if color [v] = white
5 then [v] u
6 DFS-Visit(v)
7 color [u] black
8 f[u] time time +1
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 188
Comentrios e anlise do algoritmo (1)
DFS(G)
1 for each vertex u V [G]
2 do color [u] white
3 [u] nil
4 time 0
Linhas 14: Inicializao I
Inicializao de cada vrtice para white (no des-
coberto).
Predecessor do vrtice desconhecido.
Linha 4: Inicializao II
Varivel global usada para indicar o timestamp.
Anlise:
Linhas 13: O(V ).
Cada vrtice inicializado como white e nenhum
vrtice volta a ser white.
Linha 4: O(1).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 189
Comentrios e anlise do algoritmo (2)
DFS(G) (continuao)
5 for each vertex u V [G]
6 do if color [u] = white
7 then DFS-Visit(u)
Linhas 57: Loop
Para cada vrtice ainda no descoberto (linha 6)
faz a pesquisa em profundidade (linha 7).
Anlise:
Linhas 57: O(V +E).
As linhas 57 da pesquisa DFS gastam O(V )
sem contar o tempo do procedimento DFS-Visit,
que s chamado uma nica vez para cada vr-
tice branco.
O procedimento DFS-Visit executa em O(E).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 190
Comentrios e anlise do algoritmo (3)
DFS-Visit(u)
1 color [u] gray
2 d[u] time time +1
3 for each v Adj [u]
4 do if color [v] = white
5 then [v] u
6 DFS-Visit(v)
7 color [u] black
8 f[u] time time +1
Linhas 1, 2, 7, 8: Atribuies
Inicializao de cada vrtice para white (no des-
coberto).
Predecessor do vrtice desconhecido.
Linha 4: Inicializao II
Varivel global usada para indicar o timestamp.
Anlise:
Linhas 13: O(V ).
Cada vrtice inicializado como white e nenhum
vrtice volta a ser white.
Linha 4: O(1).
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 191
Execuo do algoritmo DFS
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 192
O TAD Grafo
Importante considerar os algoritmos em grafos como tipos abstratos de da-
dos.
Conjunto de operaes associado a uma estrutura de dados.
Independncia de implementao para as operaes.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 193
Operadores do TAD Grafo
1. FGVazio(Grafo): Cria um grafo vazio.
2. InsereAresta(V1, V2, Peso, Grafo): Insere uma aresta no grafo.
3. ExisteAresta(V1, V2, Grafo): Verica se existe uma determinada aresta.
4. Obtm a lista de vrtices adjacentes a um determinado vrtice.
5. RetiraAresta(V1, V2, Peso, Grafo): Retira uma aresta do grafo.
6. LiberaGrafo(Grafo): Libera o espao ocupado por um grafo.
7. ImprimeGrafo(Grafo): Imprime um grafo.
8. GrafoTransposto(Grafo, GrafoT): Obtm o transposto de um grafo dirigido.
9. RetiraMin(A): Obtm a aresta de menor peso de um grafo com peso nas
arestas.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 194
Operao Obter Lista de Adjacentes
1. ListaAdjVazia(v, Grafo): retorna true se a lista de adjacentes de v est vazia.
2. PrimeiroListaAdj (v, Grafo): retorna o endereo do primeiro vrtice na lista
de adjacentes de v.
3. ProxAdj (v, Grafo, u, Peso, Aux, FimListaAdj ): retorna o vrtice u (apontado
por Aux) da lista de adjacentes de v, bem como o peso da aresta (v, u).
Ao retornar, Aux aponta para o prximo vrtice da lista de adjacentes de v,
e FimListaAdj retorna true se o nal da lista de adjacentes foi encontrado.
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 195
Implementao da operao Obter Lista de
Adjacentes
comum encontrar um pseudo comando do tipo:
for u ListaAdjacentes(v) do faz algo com u
O trecho de programa abaixo apresenta um possvel renamento do pseudo-
comando acima.
if not ListaAdjVazia(v, Grafo)
then begin
Aux := PrimeiroListaAdj(v, Grafo);
FimListaAdj := false;
while not FimListaAdj
do ProxAdj(v, Grafo, u, Peso, Aux, FimListaAdj);
end;
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 196
Matriz de adjacncia: Implementao
A insero de um novo vrtice ou retirada de um vrtice j existente pode ser
realizada com custo constante.
const
MaxNumVertices = 100;
MaxNumArestas = 4500;
type
TipoValorVertice = 0..MaxNumVertices;
TipoPeso = integer;
TipoGrafo = record
Mat: array[TipoValorVertice, TipoValorVertice] of TipoPeso;
NumVertices: 0..MaxNumVertices;
NumArestas : 0..MaxNumArestas;
end;
Apontador = TipoValorVertice;
procedure FGVazio(var Grafo: TipoGrafo);
var i, j: integer;
begin
for i := 0 to Grafo.NumVertices do
for j := 0 to Grafo.NumVertices do
Grafo.mat[i, j] := 0;
end; {FGVazio}
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 197
Matriz de adjacncia: Implementao
procedure InsereAresta (var V1, V2: TipoValorVertice;
var Peso : TipoPeso;
var Grafo : TipoGrafo);
begin
Grafo.Mat[V1, V2] := peso;
end; {InsereAresta}
function ExisteAresta ( Vertice1,
Vertice2: TipoValorVertice;
var Grafo: TipoGrafo): boolean;
begin
ExisteAresta := Grafo.Mat[Vertice1, Vertice2] > 0;
end; {ExisteAresta}
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 198
Matriz de adjacncia: Implementao
{Operador para obter a lista de adjacentes}
function ListaAdjVazia (var Vertice: TipoValorVertice;
var Grafo: TipoGrafo): boolean;
var Aux: Apontador;
ListaVazia: boolean;
begin
ListaVazia := true;
Aux := 0;
while (Aux < Grafo.NumVertices) and ListaVazia do
if Grafo.Mat[Vertice, Aux] > 0
then ListaVazia := false
else Aux := Aux + 1;
ListaAdjVazia := ListaVazia = true;
end; {ListaAdjVazia}
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 199
Matriz de adjacncia: Implementao
{Operador para obter a lista de adjacentes}
function PrimeiroListaAdj (var Vertice: TipoValorVertice;
var Grafo: TipoGrafo): Apontador;
var Aux: Apontador;
Listavazia: boolean;
begin
ListaVazia := true; Aux := 0;
while (Aux < Grafo.NumVertices) and ListaVazia do
if Grafo.Mat[Vertice, Aux] > 0
then begin
PrimeiroListaAdj := Aux;
ListaVazia := false;
end
else Aux := Aux + 1;
if Aux = Grafo.NumVertices
then writeln(Erro: Lista adjacncia vazia (PrimeiroListaAdj));
end; {PrimeiroListaAdj}
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 200
Matriz de adjacncia: Implementao
{Operador para obter a lista de adjacentes}
procedure ProxAdj (var Vertice: TipoValorVertice;
var Grafo: TipoGrafo;
var Adj: TipoValorVertice;
var Peso: TipoPeso;
var Prox: Apontador;
var FimListaAdj: boolean);
{Retorna Adj apontado por Prox}
begin
Adj := Prox;
Peso := Grafo.Mat[Vertice, Prox];
Prox := Prox + 1;
while (Prox < Grafo.NumVertices) and
(Grafo.Mat[Vertice, Prox] = 0) do
Prox := Prox + 1;
if Prox = Grafo.NumVertices then FimListaAdj := true;
end; {ProxAdj}
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 201
Matriz de adjacncia: Implementao
procedure RetiraAresta (var V1, V2: TipoValorVertice;
var Peso : TipoPeso;
var Grafo : TipoGrafo);
begin
if Grafo.Mat[V1, V2] = 0
then writeln(Aresta no existe)
else begin
Peso := Grafo.Mat[V1, V2];
Grafo.Mat[V1, V2] := 0;
end;
end; {RetiraAresta}
procedure LiberaGrafo (var Grafo: TipoGrafo); begin
{No faz nada no caso de matrizes de adjacncia}
end; {LiberaGrafo}
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 202
Matriz de adjacncia: Implementao
procedure ImprimeGrafo (var Grafo : TipoGrafo);
var i, j: integer;
begin
write( );
for i := 0 to Grafo.NumVertices-1 do write(i:3); writeln;
for i := 0 to Grafo.NumVertices-1 do
begin
write(i:3);
for j := 0 to Grafo.NumVertices-1 do write(Grafo.mat[i,j]:3);
writeln;
end;
end; {ImprimeGrafo}
UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 203

You might also like