Buscar

Introdução aos Grafos

Prévia do material em texto

24/06/2018
1
Estruturas de Dados
Grafos
Prof. Luciana R. Cardoso
Grafos - Introdução 
Prof. Luciana R. Cardoso
2
 Muitas aplicações em computação necessitam
considerar conjunto de conexões entre pares de
objetos:
 Existe um caminho para ir de um objeto a outro
seguindo as conexões?
 Qual é a menor distância entre um objeto e outro
objeto?
 Quantos outros objetos podem ser alcançados a
partir de um determinado objeto?
 Existe um tipo abstrato chamado grafo que é
usado para modelar tais situações.
24/06/2018
2
Grafos - Introdução 
 Alguns exemplos de problemas práticos que podem
ser resolvidos através de uma modelagem em grafos:
 Ajudar máquinas de busca a localizar informação
relevante na Web.
 Descobrir os melhores casamentos entre posições
disponíveis em empresas e pessoas que aplicaram
para as posições de interesse.
 Descobrir qual é o roteiro mais curto para visitar as
principais cidades de uma região turística.
 Etc.
Prof. Luciana R. Cardoso
3
Grafos - Exemplos
 Transporte aéreo
 objeto: cidades
 relacionamento: vôo comercial entre duas cidades
Prof. Luciana R. Cardoso
4
24/06/2018
3
Grafo - Definição
 “Um grafo é um conjunto de pontos, chamados
vértices, conectados por linhas, chamadas de
arestas” .
 Abstração que permite codificar relacionamentos
entre pares de objetos.
 Que objetos?
 Qualquer um! Ex. pessoas, cidades, empresas, países, páginas
web, filmes, etc...
 Que relacionamentos?
 Qualquer um! Ex. amizade, conectividade, produção, língua
falada, etc.
Prof. Luciana R. Cardoso
5
Grafo - Definição
 Muitas situações do mundo real podem ser
convenientemente representadas por meio
de um diagrama consistindo de um conjunto
de pontos e de linhas que ligam alguns pares
desses pontos. Por exemplo, os pontos
poderiam representar centros de
comunicação e, neste caso, as linhas
denotariam os links entre os centros. Tal
abstração matemática faz surgir o conceito
de grafos.
Prof. Luciana R. Cardoso
6
24/06/2018
4
Grafo - Definição
Prof. Luciana R. Cardoso
7
Grafos - Exemplos
 Web
 objeto: páginas web
 relacionamento: link de uma pagina para outra
Prof. Luciana R. Cardoso
8
24/06/2018
5
Grafos – Conceitos Básicos
Prof. Luciana R. Cardoso
9
Grafos – Conceitos Básicos
 Grafo: conjunto de vértices e arestas.
 Vértice: objeto simples que pode ter nome e outros
atributos.
 Aresta: conexão entre dois vértices.
Prof. Luciana R. Cardoso
10
Notação: G = (V;A)
– G: grafo
– V: conjunto de vértices
– A: conjunto de arestas
24/06/2018
6
Grafos – Conceitos Básicos
 Suponha que existam seis sistemas computacionais
(A, B, C, D, E, e F) interconectados entre si da
seguinte forma:
Prof. Luciana R. Cardoso
11
•Esta informação pode ser representada por este diagrama,
chamado de grafo.
•Este diagrama identifica unicamente um grafo.
Como aprender a modelar grafos?
 Estudando problemas existentes
 abstrair o problema real
 solucionar o problema no domínio grafos
Prof. Luciana R. Cardoso
12
Algoritmos em grafos!
24/06/2018
7
Transporte Aéreo
 Perguntas interessantes?
 Voos entre todas as cidades?
 Que tem voos?
 Menor número de voos entre duas cidades?
Prof. Luciana R. Cardoso
13
Algoritmos para responder!
Poder da Abstração
 Muitos problemas resolvidos com o mesmo
algoritmo (solução) em cima da abstração!
Prof. Luciana R. Cardoso
14
24/06/2018
8
Terminologia
 Cada aresta está associada a um conjunto de um ou
dois vértices, chamados nós terminais.
 Extremidade de uma aresta: vértice da aresta.
 Função aresta–extremidade: associa aresta a
vértices.
 Laço (Loop): aresta somente com nó terminal.
 Arestas paralelas: arestas associadas ao mesmo
conjunto de vértices.
 Uma aresta é dita conectar seus nós terminais.
Prof. Luciana R. Cardoso
15
Terminologia
 Dois vértices que são conectados por uma aresta são
chamados de adjacentes.
 Um vértice que é nó terminal de um laço é dito ser
adjacente a si próprio.
 Uma aresta é dita ser incidente a cada um de seus
nós terminais.
 Duas arestas incidentes ao mesmo vértice são
chamadas de adjacentes.
 Um vértice que não possui nenhuma aresta incidente
é chamado de isolado.
 Um grafo com nenhum vértice é chamado de vazio.
Prof. Luciana R. Cardoso
16
24/06/2018
9
Terminologia
Prof. Luciana R. Cardoso
17
Terminologia
 Definição 1
 Um Grafo G = (V, E) consiste em V, um conjunto não vazio
de vértices (ou nós), e E, um conjunto de arestas. Cada aresta tem
um ou dois vértices associados a ela, chamados de suas
extremidades.
 Dizemos que uma aresta liga ou conecta suas extremidades.
Prof. Luciana R. Cardoso
18
24/06/2018
10
Terminologia
 Definição 2
 Um Grafo orientado (ou dígrafo) (V, E) consiste em V,
um conjunto não vazio de vértices (ou nós), e E, um conjunto
de arestas. E cada aresta orientada está associada a um par
ordenado de vértices. É dito que aresta orientada associada ao
par ordenado (u, v) começa em u e termina em v.
Prof. Luciana R. Cardoso
19
Terminologia
 Tipos:
 Grafo Simples: cada aresta conecta dois vértices
diferentes {u, v}.
 Multigrafos: arestas múltiplas: várias arestas conectadas
ao mesmo vértices. Multiplicidade m.
 Laços: Arestas que conectam um vértices a si mesmo.
Prof. Luciana R. Cardoso
20
24/06/2018
11
Grafos Direcionados
 Um grafo direcionado G é um par (V;A), onde V é um conjunto
finito de vértices e A é uma relação binária em V .
 Um grafo dirigido ou digrafo ou direcionado G consiste de
dois conjuntos finitos:
 1. Vértices V (G)
 2. Arestas dirigidas E(G), onde cada aresta é associada a um
par ordenado de vértices chamados de nós terminais. Se a
aresta e é associada ao par (u, v) de vértices, diz-se que e é
a aresta dirigida de u para v.
 Podem existir arestas de um vértice para ele mesmo, chamadas
de self-loops (ciclos).
Prof. Luciana R. Cardoso
21
Grafos Direcionados
 Para cada grafo dirigido, existe um grafo simples
(não dirigido) que é obtido removendo as direções
das arestas, e os loops.
Prof. Luciana R. Cardoso
22
24/06/2018
12
Grafos Não Direcionados
 Um grafo não direcionado G é um par (V;A), onde o
conjunto de arestas A é constituído de pares de
vértices não ordenados.
 As arestas (u; v) e (v; u) são consideradas como uma única
aresta. A relação de adjacência é simétrica.
 Self-loops não são permitidos.
Prof. Luciana R. Cardoso
23
Versão Direcionada de um Grafo Não 
Direcionado
 A versão direcionada de um grafo não direcionado G =
(V;A) é um grafo direcionado G’ = (V’;A’) onde (u; v) A’
sse (u; v) A.
 Cada aresta não direcionada (u; v) em G é substituída por
duas arestas direcionadas (u; v) e (v; u)
 Em um grafo direcionado, um vizinho de um vértice u é
qualquer vértice adjacente a u na versão não direcionada de
G.
Prof. Luciana R. Cardoso
24


24/06/2018
13
Versão Não Direcionada de um Grafo 
Direcionado
 A versão não direcionada de um grafo direcionado G
= (V;A) é um grafo não direcionado G’ = (V’;A’) onde
(u; v) A’ sse u v e (u; v) A.
 A versão não direcionada contém as arestas de G
sem a direção e sem os self-loops.
 Em um grafo não direcionado, u e v são vizinhos se
eles são adjacentes.
Prof. Luciana R. Cardoso
25
  
Grau de um Vértice
 Em grafos não direcionados:
 O grau de um vértice é o número de arestas que incidem nele.
exceto que um laço em um vértice contribui duas vezes ao
grau daquele vértice.
 Um vértice de grau zero é dito isolado ou não conectado.
 O grau de um vértice v é indicado por gr(v).
Prof.Luciana R. Cardoso
26
24/06/2018
14
Grau de um Vértice
 Seja G um grafo e um vértice v de G. O grau de v,
denominado grau(v) (deg(v)), é igual ao número de
arestas que são incidentes a v, com uma aresta que
seja um laço contada duas vezes. O grau total de G é
a soma dos graus de todos os vértices de G.
 Ex.: O vértice 1 tem grau 2 e o vértice 3 é isolado.
Prof. Luciana R. Cardoso
27
Quais são os graus
dos vértices nos
grafos da figura?
Grau de um Vértice
 Em grafos direcionados
 O grau de um vértice é o número de arestas que saem dele
(out-degree) mais o número de arestas que chegam nele (in-
degree).
 Ex.: O vértice 2 tem in-degree 2, out-degree 2 e grau
4.
Prof. Luciana R. Cardoso
28
24/06/2018
15
Grau de um Vértice
 Exemplo: Seja o grafo G. Determine o grau de cada vértice e
o grau total de G.
 grau(v1) = 0, já que não existe aresta incidente a v1, que é um vértice
isolado.
 grau(v2) = 2, já que e1 e e2 são incidentes a v2.
 grau(v3) = 4, já que e1, e2 e e3 são incidentes a v3, sendo que e3
contribui com dois para o grau de v3.
 Grau de G = grau(v1) + grau(v2) + grau(v3) = 0 + 2 + 4 = 6
 Grau de G = 2 × número de arestas de G, que é 3, ou seja,
cada aresta contribui com dois para o grau total do grafo.
Prof. Luciana R. Cardoso
29
Grau de um Vértice
 Corolário: O grau total de um grafo é par.
 É possível ter um grafo com quatro vértices de graus
1, 1, 2, e 3? Não. O grau total deste grafo é 7, que é
um número ímpar.
 É possível ter um grafo com quatro vértices de graus
1, 1, 3, e 3? Sim. Exemplos:
Prof. Luciana R. Cardoso
30
24/06/2018
16
Grau de um Vértice
 É possível ter um grafo com 10 vértices de graus 1, 1,
2, 2, 2, 3, 4, 4, 4, e 6?
 Não. Duas formas de provar:
 1. Este grafo supostamente possui três vértices de grau ímpar,
o que não é possível.
 2. Este grafo supostamente possui um grau total = 29, o que
não é possível.
Prof. Luciana R. Cardoso
31
Caminho entre Vértices
 Um caminho de comprimento k de um vértice x a
um vértice y em um grafo G = (V;A) é uma sequência
de vértices (v0, v1, v2, ... , vk) tal que x = v0 e y = vk, e
(vi-1, vi) A para i = 1, 2,..., k.
 O comprimento de um caminho é o número de
arestas nele, isto é, o caminho contém os vértices v0,
v1;, v2, ... , vk e as arestas (v0, v1); (v1, v2), ... , (vk-1, vk).
Prof. Luciana R. Cardoso
32

24/06/2018
17
Caminho entre Vértices
 Se existir um caminho c de x a y então y é
alcançável a partir de x via c.
 Um caminho é simples se todos os vértices do
caminho são distintos.
 Ex.: O caminho (0; 1; 2; 3) é simples e tem
comprimento 3. O caminho (1; 3; 0; 3) não é simples.
Prof. Luciana R. Cardoso
33
Ciclos 
 Em um grafo direcionado:
 Um caminho (v0, v1, v2, ... , vk) forma um ciclo se v0 = vk e o
caminho contém pelo menos uma aresta.
 O ciclo é simples se os vértices v1, v2, ... , vk são distintos.
 O self-loop é um ciclo de tamanho 1.
 Dois caminhos (v0, v1, v2, ... , vk) e (v’ 0, v’1, ... , v’k) formam o
mesmo ciclo se existir um inteiro j tal que v’i = v(i+j) mod k para i
= 0, 1, ... , k - 1.
Prof. Luciana R. Cardoso
34
24/06/2018
18
Ciclos 
 Em um grafo direcionado:
 Ex.: O caminho (0, 1, 2, 3, 0) forma um ciclo. O caminho(0, 1,
3, 0) forma o mesmo ciclo que os caminhos (1, 3, 0, 1) e (3, 0, 1,
3).
Prof. Luciana R. Cardoso
35
Ciclos 
 Em um grafo não direcionado:
 Um caminho (v0, v1, v2, ... , vk) forma um ciclo se v0 = vk e o
caminho contém pelo menos três arestas.
 O ciclo é simples se os vértices v1, v2, ... , vk)são distintos.
 Ex.: O caminho (0; 1; 2; 0) é um ciclo.
Prof. Luciana R. Cardoso
36
24/06/2018
19
Componentes Conectados
 Um grafo não direcionado é conectado se cada par de
vértices está conectado por um caminho.
 Os componentes conectados são as porções
conectadas de um grafo.
 Um grafo não direcionado é conectado se ele tem
exatamente um componente conectado.
 Ex.: Os componentes são: {0, 1, 2} , {4, 5} e {3}.
Prof. Luciana R. Cardoso
37
Componentes Fortemente Conectados
 Um grafo direcionado G = (V;A) é fortemente
conectado se cada dois vértices quaisquer são
alcançáveis a partir um do outro.
 Os componentes fortemente conectados de
um grafo direcionado são conjuntos de vértices sob a
relação “são mutuamente alcançáveis”.
 Um grafo direcionado fortemente conectado
tem apenas um componente fortemente conectado.
Prof. Luciana R. Cardoso
38
24/06/2018
20
Componentes Fortemente Conectados
 Ex.: {0, 1, 2, 3}, {4} e {5} são os componentes
fortemente conectados, {4, 5} não o é pois o vértice 5
não é alcançável a partir do vértice 4.
Prof. Luciana R. Cardoso
39
Definições Básicas
 Laço – uma aresta que incide com um único vértice é chamada de laço.
 Orientação – é a direção para a qual uma seta aponta. Se a aresta não
tiver seta, diz-se que ela não tem orientação
 Incidente – Diz-se que uma aresta é incidente com os vértices que ela
liga (não importa a orientação).
 Vértices Adjacentes – dois vértices são adjacentes se estão ligados
por uma aresta.
 Vértice isolado – Um vértice é dito isolado se não existe aresta
incidente sobre ele.
 Arestas paralelas – Duas arestas incidentes nos mesmos vértices
(não importa a orientação). Ou seja, se a1 = (v,w) e a2 = (v,w), então as
arestas a1 e a2 são paralelas.
Prof. Luciana R. Cardoso
40
24/06/2018
21
Definições Básicas
Prof. Luciana R. Cardoso
41
Definições Básicas
Prof. Luciana R. Cardoso
42
24/06/2018
22
Definições Básicas
Prof. Luciana R. Cardoso
43
Definições Básicas
Prof. Luciana R. Cardoso
44
24/06/2018
23
Definições Básicas
Prof. Luciana R. Cardoso
45
Definições Básicas
Prof. Luciana R. Cardoso
46
24/06/2018
24
Definições Básicas
Prof. Luciana R. Cardoso
47
Modelos usando Grafos
Prof. Luciana R. Cardoso
48
24/06/2018
25
Tipos de Grafos
 Grafo Rotulado
 Um grafo é dito rotulado quando seus vértices e/ou arestas são
distinguidos uns dos outros por rótulos (que pode ser um
nome, um número ou conjunto de letras ou números. Caso
contrário o grafo é não rotulado.
 Nos exemplos a seguir, o primeiro grafo não tem nenhum
rótulo. O segundo grafo possui rótulos nos vértices e o terceiro
grafo possui rótulos nas arestas.
Prof. Luciana R. Cardoso
49
Tipos de Grafos
 Grafo Rotulado
Prof. Luciana R. Cardoso
50
24/06/2018
26
Tipos de Grafos
 Exemplo 1 – Represente graficamente um
grafo definido matematicamente como
segue: Grafo G(V,A), onde V = {v1,v2,v3,v4} e
A = {(v1,v2),(v2,v3),(v3,v3),(v3,v1)}.
 Há varias formas gráficas semelhantes de se
representar esse grafo, mantendo as definições, pois
a posição dos vértices no espaço é irrelevante. Vou
fazer de duas formas diferentes.
Prof. Luciana R. Cardoso
51
Tipos de Grafos
Prof. Luciana R. Cardoso
52
Exemplo 1
24/06/2018
27
Tipos de Grafos
 Subgrafos
 Um grafo H = (V 0,E0) é dito ser um subgrafo de um grafo G =
 (V,E) sse:
 cada vértice de H é também um vértice de G, ou seja, V’ V ;
 cada aresta de H é também uma aresta de G, ou seja, E E; e
 cada aresta de H tem os mesmos nós terminais em G, ou seja, se
(u, v) E’ então (u, v) E.
 Exemplo: Todos os subgrafos do grafo G:
Prof. Luciana R. Cardoso
53




Tipos de Grafos
 Ordem
 A ordem de um grafo é definida por |V| = n. Ou seja, a ordem
de um grafo é o número de vértices.
 Grafos simples
 Um grafo simples é um grafo que não possui laços nem
arestas paralelas. Num grafo simples, uma aresta com
vértices (nós terminais) u e v é representada por uv.
Prof. Luciana R.Cardoso
54
24/06/2018
28
Tipos de Grafos
 Grafo completo
 Um grafo completo de n vértices, denominado Kn , é um
grafo simples com n vértices v1, v2, . . . , vn, cujo conjunto de
arestas contém exatamente uma aresta para cada par de
vértices distintos. Exemplo: Grafos completos com 2, 3, 4, e
5 vértices. Um grafo completo de n vértices é denominado
cliques.
Prof. Luciana R. Cardoso
55
Tipos de Grafos
 Multigrafos
 Um multigrafo é um grafo que não possui laços mas pode
ter arestas paralelas. grafo que contém arestas paralelas ou aços
Prof. Luciana R. Cardoso
56
24/06/2018
29
Tipos de Grafos
 Pseudografo
 Um pseudografo é um grafo que pode ter laços e arestas
paralelas. Formalmente, um pseudografo G = (V,E) consiste de
um conjunto V de vértices, um conjunto E de arestas, e uma
função f de E para {{u, v}|u, v V }.
 Pseudografo é mais geral que um multigrafo.
Prof. Luciana R. Cardoso
57

Tipos de Grafos
 Grafo ciclo
 Um grafo ciclo de n vértices, denominado Cn, n ≥ 3, é um
grafo simples com n vértices v1, v2, . . . , vn, e arestas v1v2,
v2v3, . . ., vn−1vn, vnv1.
 Exemplo: Grafos ciclos de 3, 4, e 5 vértices.
Prof. Luciana R. Cardoso
58
24/06/2018
30
Tipos de Grafos
 Grafo roda
 Um grafo roda, denominado Wn, é um grafo simples com n + 1
vértices que é obtido acrescentado um vértice ao grafo ciclo Cn,
n ≥ 3, e conectando este novo vértice a cada um dos n vértices
de Cn. Exemplo: Grafos rodas de 3, 4, e 5 vértices.
Prof. Luciana R. Cardoso
59
Tipos de Grafos
 Grafo Cubo-n
 Um grafo cubo-n de 2n vértices, denominado Qn, é um grafo
simples que representa os 2n strings de n bits. Dois vértices são
adjacentes sse os strings que eles representam diferem em
exatamente uma posição.
 O grafo Qn+1 pode ser obtido a partir do grafo Qn usando o
seguinte algoritmo:
 1. Faça duas cópias de Qn;
 2. Prefixe uma das cópias de Qn com 0 e a outra com 1;
 3. Acrescente uma aresta conectando os vértices que só diferem no
primeiro bit.
Prof. Luciana R. Cardoso
60
24/06/2018
31
Tipos de Grafos
 Grafo Cubo-n
 Exemplo: Grafos Qn, para n = 1, 2, e 3 vértices.
Prof. Luciana R. Cardoso
61
Tipos de Grafos
 Hipergrafo
 Um hipergrafo H(V, F) é definido pelo par de conjuntos V e F,
onde:
 V é um conjunto não vazio de vértices;
 F é um conjunto que representa uma “família” e partes não vazias
de V .
 Um hipergrafo é um grafo não dirigido em que cada aresta
conecta um número arbitrário de vértices.
Prof. Luciana R. Cardoso
62
24/06/2018
32
Terminologia de Grafos
Prof. Luciana R. Cardoso
63
Tipos de Grafos
 Grafo Complementar
 Um grafo é dito complementar de G se possui a mesma
ordem de G e se uma aresta (v,w) G, então (v,w) e vice-
versa. Exemplo:
Prof. Luciana R. Cardoso
64
G
G 
24/06/2018
33
Tipos de Grafos
 Grafo Complementar
 No caso de grafos dirigidos, o grafo complementar será
aquele que possui os mesmos vértices de G, possui todas as
arestas não presentes em G e possui o reverso das arestas de G.
Por exemplo:
Prof. Luciana R. Cardoso
65
G
Tipos de Grafos
 Grafo Bipartido
 Um grafo bipartido de m, n vértices, denominado Km,n, é um
grafo simples com vértices v1, v2, . . . , vm e w1,w2, . . . ,wn, que
satisfaz as seguintes propriedades:
 i, k = 1, 2, . . . ,m ^
 j, l = 1, 2, . . . , n
 1. uma aresta entre cada par de vértices vi e wj;
 2. ~ uma aresta entre cada par de vértices vi e vk;
 3. ~ uma aresta entre cada par de vértices wj e wl;
 Ou seja, o grafo pode ser dividido logicamente em dois
conjuntos de vértices, tal que toda aresta começa no vértice de
um dos conjuntos e termina no vértice do outro conjunto.
Prof. Luciana R. Cardoso
66





24/06/2018
34
Tipos de Grafos
 Grafo Bipartido
 Exemplo: Grafos bipartidos K3,2 e K3,3.
Prof. Luciana R. Cardoso
67
Tipos de Grafos
 Grafo Dirigido
 Um grafo é chamado de dirigido (ou dígrafo) se suas arestas
possuem orientação. Caso contrário o grafo é não dirigido. Em
termos leigos: será dirigido se suas arestas forem “flechas” que
apontam o vértice inicial e final de cada aresta.
Prof. Luciana R. Cardoso
68
24/06/2018
35
Tipos de Grafos
 Grafos Isomorfos
 Dois grafos são isomorfos se coincidirem os vértices de suas
representações gráficas, preservando as adjacências das
arestas. Em outras palavras, são isomorfos se têm a mesma
representação matemática, mas são representados
diferentemente graficamente.
Prof. Luciana R. Cardoso
69
Tipos de Grafos
 Grafos Isomorfos
 Observe os grafos G e H da figura a seguir .
Prof. Luciana R. Cardoso
70
24/06/2018
36
Tipos de Grafos
 Grafos Isomorfos
 A figura apresenta dois grafos diferentes mas que representam
a mesma situação. Os dois grafos apresentam 6 vértices e 10
arestas. Os dois têm as mesmas quantidades de vértices e de
arestas que preservam as correspondências.
 Ao estabelecer uma relação entre os conjuntos dos vértices dos
grafos G e H por uma função, temos uma relação de
correspondência 1 – a - 1. Ou seja, ao tomarmos o vértice 1 do
grafo G, a função fará uma correspondência com o vértice A do
grafo H.
Prof. Luciana R. Cardoso
71
Tipos de Grafos
 Grafos Isomorfos
 Os desenhos abaixo representam o mesmo grafo G:
 Conjuntos de vértices e arestas são idênticos;
 Funções aresta–vértice são as mesmas.
 Grafos isomorfos (do grego, o que significa a mesma forma).
Prof. Luciana R. Cardoso
72
24/06/2018
37
Tipos de Grafos
Prof. Luciana R. Cardoso
73
G
r
a
f
o
s
I
s
o
m
o
r
f
o
s
Tipos de Grafos
Prof. Luciana R. Cardoso
74
24/06/2018
38
Tipos de Grafos
Prof. Luciana R. Cardoso
75
Tipos de Grafos
Prof. Luciana R. Cardoso
76
24/06/2018
39
Tipos de Grafos
Prof. Luciana R. Cardoso
77
 Isomorfismo de grafos é uma relação de equivalência
no conjunto de grafos.
 Informalmente, temos que esta propriedade é:
 Reflexiva: Um grafo é isomorfo a si próprio.
 Simétrica: Se um grafo G é isomorfo a um grafo G’ então G’ é
isomorfo a G.
 Transitiva: Se um grafo G é isomorfo a um grafo G’ e G’ é
isomorfo a G’’ então G é isomorfo a G’.
Prof. Luciana R. Cardoso
78
24/06/2018
40
Tipos de Grafos
 Grafo valorado (ponderado)
 Um grafo valorado é um grafo em que cada aresta tem um
valor associado. Formalmente, um grafo valorado G = (V,E)
consiste de um conjunto V de vértices, um conjunto E de
arestas, e uma função f de E para P, onde P representa o
conjunto de valores (pesos) associados às arestas.
 Grafo valorado é usado para modelar vários problemas
importantes em Ciência da Computação.
Prof. Luciana R. Cardoso
79
Tipos de Grafos
 Grafo regular
 Um grafo é dito ser regular quando todos os seus vértices têm
o mesmo grau.
 Exemplo: Os grafos completos com 2, 3, 4, e 5 vértices são
grafos regulares.
Prof. Luciana R. Cardoso
80
24/06/2018
41
Tipos de Grafos
 Planar: É um grafo onde não há cruzamento de 
arestas.
Prof. Luciana R. Cardoso
81
Representação de um grafo
 Dado um grafo G = (V,E):
 V = conjunto de vértices.
 E = conjunto de arestas, que pode ser representado pelo
subconjunto de V × V .
 O tamanho da entrada de dados é medido em termos
do:
 Número de vértices |V |.
 Número de arestas |E|.
 Se G é conexo então |E| ≥ |V | − 1.
Prof. Luciana R. Cardoso
82
24/06/2018
42
Representação de Grafos em um 
Computador
 Para que um grafo seja armazenado em um
computador, é necessário definir dois aspectos:
 Quais informações devem ser consideradas
 Como armazenar asinformações no computador, ou seja,
definir a estrutura de dados que será utilizada.
 A estrutura de dados é particularmente importante,
pois a eficiência de um algoritmo que irá trabalhar
sobre o grafo vai depender da escolha certa de como
representar o grafo.
 De uma forma geral, pode-se representar um grafo
utilizando matrizes ou listas, como veremos a seguir.
Prof. Luciana R. Cardoso
83
Representação de um grafo
Estruturas de dados
 Matriz de adjacência:
 Forma preferida de representar grafos densos (|E| |V |2).
 Indica rapidamente (O(1)) se existe uma aresta conectando dois
vértices.
 Lista de adjacência:
 Representação normalmente preferida.
 Provê uma forma compacta de representar grafos esparsos (|E| « |V
|2).
 Matriz de incidência:
 Representação que inclui vértice e aresta.
 Dentre outras representações. As duas primeiras formas
acima são as principais formas de representar um grafo.
Prof. Luciana R. Cardoso
84

24/06/2018
43
Representação de um grafo
Estruturas de dados
1. FGVazio(Grafo): Cria um grafo vazio.
2. InsereAresta(V1,V2,Peso, Grafo): Insere uma aresta no
grafo.
3. ExisteAresta(V1,V2,Grafo): Verifica se existe uma
determinada aresta.
4. Obtem a lista de vértices adjacentes a um determinado
vértice (tratada a seguir).
5. RetiraAresta(V1,V2,Peso, Grafo): Retira uma aresta do
grafo.
6. LiberaGrafo(Grafo): Liberar o espaço ocupado por um
grafo.
Prof. Luciana R. Cardoso
85
Representação de um grafo
Estruturas de dados
7. ImprimeGrafo(Grafo): Imprime um grafo.
8. GrafoTransposto(Grafo,GrafoT): Obtém o
transposto de um grafo direcionado.
9. RetiraMin(A): Obtém a aresta de menor peso de
um grafo com peso nas arestas.
Prof. Luciana R. Cardoso
86
24/06/2018
44
Representação de um grafo 
Matriz de adjacência
 A matriz de adjacência de um grafo G = (V;A)
contendo n vértices é uma matriz n x n de bits, onde
A[i; j] é 1 (ou verdadeiro) se e somente se existe uma
conexão do vértice i para o vértice j.
 Para grafos ponderados A[i; j] contém o rótulo ou
peso associado com a aresta e, neste caso, a matriz
não é de bits.
 Se não existir uma aresta de i para j então é
necessário utilizar um valor que não possa ser usado
como rótulo ou peso.
Prof. Luciana R. Cardoso
87
Representação de um grafo não dirigido
Matriz de adjacência
 Exemplos:
Prof. Luciana R. Cardoso
88
24/06/2018
45
Representação de um grafo não dirigido
Matriz de adjacência
 Exemplos:
Prof. Luciana R. Cardoso
89
Representação de um grafo não dirigido
Matriz de adjacência
 Exemplos:
Prof. Luciana R. Cardoso
90
24/06/2018
46
Representação de um grafo dirigido
Matriz de adjacência
 Exemplos:
Prof. Luciana R. Cardoso
91
Representação de um grafo dirigido
Matriz de adjacência
 Exemplos: 
Prof. Luciana R. Cardoso
92
24/06/2018
47
Representação de um grafo dirigido
Matriz de adjacência
 Exemplos:
Prof. Luciana R. Cardoso
93
Representação de um grafo dirigido
Matriz de adjacência
 Exemplos:
Prof. Luciana R. Cardoso
94
24/06/2018
48
Representação de um grafo 
Matriz de adjacência: Análise
 É muito útil para algoritmos em que necessitamos
saber com rapidez se existe uma aresta ligando dois
vértices.
Prof. Luciana R. Cardoso
95
Representação de um grafo 
Lista de adjacência
 Vetor Adj de |V | listas, uma para cada vértice de V .
 Para cada vértice u 2 V , a lista Adj[u] contém
apontadores para todos os vértices v tal que a aresta
(u, v) 2 E (todos os vértices adjacentes a u em G).
 Definição vale para grafos não dirigidos e dirigidos.
 “comprimento da lista de adjacência”, vale:
 Grafo dirigido = |E|, cada aresta aparece uma única vez na
lista.
 Grafo não dirigido = 2|E|, cada aresta aparece duas vezes na
lista (entrada de u e entrada de v).
Prof. Luciana R. Cardoso
96
24/06/2018
49
Representação de um grafo 
Lista de adjacência usando apontadores
 Um arranjo Adj de |V | listas, uma para cada vértice em V .
 Para cada u V , Adj[u] contém todos os vértices adjacentes
a u em G.
Prof. Luciana R. Cardoso
97

Representação de um grafo 
Lista de adjacência usando arranjos
 Cab: endereços do último
item da lista de adjacentes
de cada vértice (nas |V|
primeiras posições) e os
vértices propriamente ditos
(nas |A| últimas posições)
 Prox: endereço do
próximo item da lista de
adjacentes.
 Peso: valor do peso de
cada aresta do grafo (nas
últimas |A| posições).
Prof. Luciana R. Cardoso
98
24/06/2018
50
 Os vértices de uma lista de adjacência são em geral
armazenados em uma ordem arbitrária.
 Possui uma complexidade de espaço O(|V | + |A|)
 É compacta e usualmente utilizada na maioria das
aplicações.
 A principal desvantagem é que ela pode ter tempo
O(|V |) para determinar se existe uma aresta entre o
vértice i e o vértice j, pois podem existir O(|V|)
vértices na lista de adjacentes do vértice i.
Prof. Luciana R. Cardoso
99
Representação de um grafo 
Lista de adjacência: Análise
Representação de um grafo
Lista de adjacência e grafo dirigido
Prof. Luciana R. Cardoso
100
24/06/2018
51
Representação de um grafo
Lista de adjacência e grafo dirigido
Prof. Luciana R. Cardoso
101
Representação de um grafo
Lista de adjacência e grafo dirigido
Prof. Luciana R. Cardoso
102
24/06/2018
52
Representação de um grafo
Lista de adjacência e grafo não dirigido
Prof. Luciana R. Cardoso
103
Representação de um grafo
Lista de adjacência e grafo não dirigido
Prof. Luciana R. Cardoso
104
24/06/2018
53
Representação de um grafo
Matriz de Incidência
 Dado um grafo G(V,A) de n vértices e m arestas a
matriz de incidência de G é denotada por B = [bij] é
uma matriz n x m definida por:
Prof. Luciana R. Cardoso
105



=
contrário caso 0
a de vérticeé vse 1 ji
ijb
Representação de um grafo
Matriz de Incidência
 Se o grafo G for orientado (dígrafo), então poderá ser 
definida como:
Prof. Luciana R. Cardoso
106





=
ji
ji
iji
a aresta à pertence não v vérticeo se 0
a de final efor vértic vse 1-
) v vérticeno laço umexistir se(ou a de inicial efor vértic vse 1
ijb
24/06/2018
54
Representação de um grafo
Matriz de Incidência
Prof. Luciana R. Cardoso
107
Representação de um grafo
Matriz de Custo
 Um grafo valorado pode ser representado por uma
matriz de custo w = {wij}, onde:
Prof. Luciana R. Cardoso
108






=
aresta) exista não caso seja,(ou A ) v,(v caso 
A ) v,(v se aresta, da custo
ji
ji
ijw
24/06/2018
55
Representação de um grafo
Listas de Arestas
 Pode-se representar um grafo em um computador
utilizando-se duas listas de vértices, representando
as arestas do grafo. As listas podem ser vetores
simples.
 A primeira lista contém os vértices de início de cada
aresta.
 A segunda lista contém os vértices onde cada uma
delas termina. Por exemplo:
Prof. Luciana R. Cardoso
109
Representação de um grafo
Listas de Arestas
Prof. Luciana R. Cardoso
110
24/06/2018
56
Representação de um grafo
Estrutura de Adjacência
 Um grafo pode ser representado por uma lista de
vértices e, para cada vértice da lista, é associada uma
lista dos seus respectivos sucessores. Exemplo:
Prof. Luciana R. Cardoso
111
Caminho e Conexidade
 Caminho:
 Formalmente temos o seguinte: Definição: seja G(V,A) um
grafo. Então define-se um caminho de G como sendo uma
sequência de arestas da forma (u,v),(v,w),(w,x),...,(y,z),
onde cada aresta pertence ao grafo G. O caminho denotado
é definido, também, como o caminho entre u e z e podeser
representado por: u v w x ... y z.
 O exemplo abaixo mostra um caminho entre d e c. O
caminho é denotado por d a b c.
Prof. Luciana R. Cardoso
112
24/06/2018
57
Caminho e Conexidade
 Cadeia
 Definição: uma cadeia é uma sequência de arestas de um
grafo G, tal que qualquer par de arestas subsequentes possuem
um vértice de incidência comum. Ao contrário da definição de
caminho, uma cadeia ignora a orientação das arestas.
 Portanto, todo caminho é uma cadeia, porém a recíproca nem
sempre é verdadeira. Veja o seguinte exemplo:
Prof. Luciana R. Cardoso
113
A sequência a b c d é um caminho, também uma
cadeia.
A sequência a b d c é uma cadeia, mas não é um
caminho.
Caminho e Conexidade
 Comprimento
 Definição: o número de arestas k que compõem um caminho
(ou cadeia) é denominado de comprimento do caminho (ou da
cadeia). Exemplo.
 O caminho a b c d é um caminho entre ‘a’ e ‘d’ de comprimento
igual a 3
Prof. Luciana R. Cardoso
114
24/06/2018
58
Caminho e Conexidade
 Caminho Simples x Trajetória
 Definição: se os vértices de um caminho (ou cadeia) forem
distintos (com exceção do vértice inicial e o vértice final), então
a sequência recebe o nome de caminho simples (ou cadeia
simples). Se as arestas da sequência forem distintas, então a
sequência recebe o nome de trajeto ou trajetória. Exemplo:
Prof. Luciana R. Cardoso
115
A sequência 1 2 3 4 5 é um caminho simples.
A sequência 1 2 3 4 2 é uma trajetória.
A sequência 1 2 3 4 2 1 é apenas uma 
sequência.
Caminho e Conexidade
 Grafo Conexo
 Definição: um grafo G é conexo se existe pelo menos um
caminho (ou cadeia) entre qualquer par de vértices de G. Caso
contrário o grafo é desconexo. Exemplo:
 Todo grafo desconexo é composto por subgrafos conexos
chamados de componentes. Por exemplo, o grafo b) é um grafo
desconexo composto por 2 componentes.
Prof. Luciana R. Cardoso
116
24/06/2018
59
Caminho e Conexidade
 Caminhos abertos e fechados
 Um caminho em G é denominado fechado se o vértice final é o
mesmo que o vértice inicial. Caso contrário, o caminho é
denominado aberto. Exemplo:
 De forma semelhante a um caminho fechado, uma cadeia
fechada de um grafo é uma cadeia de G tal que a aresta inicial e
a aresta final possuem um vértice de incidência em comum, ou
em outras palavras, se o vértice inicial e o vértice final se
confundem.
Prof. Luciana R. Cardoso
117
Caminho aberto: b d c e
Caminho fechado: b d c e b
Caminho e Conexidade
 Circuito e Ciclo
 Um circuito é um caminho simples fechado.
 Um ciclo é uma cadeia simples fechada. Exemplo:
 Um grafo que não contém nenhum ciclo é chamado de “grafo 
acíclico”.
Prof. Luciana R. Cardoso
118
Circuito: a b c d a
Ciclo: d c b d
24/06/2018
60
Busca em Grafos
 Um algoritmo de busca (ou varredura) é um
algoritmo que examina, sistematicamente, todos os
vértices e todas as arestas de um grafo.
 Cada aresta é examinado uma só vez. Depois de
visitar a ponta inicial de uma aresta, o algoritmo
percorre aresta e visita sua ponta final.
 Para justificar a palavra "busca", devemos imaginar
que o algoritmo percorre o grafo buscando todos os
vértices que são acessíveis a partir de um
determinado vértice em questão.
Prof. Luciana R. Cardoso
119
Busca em Grafos
 Há muitas maneiras de fazer uma tal busca. Cada
estratégia de busca é caracterizada pela ordem em
que os vértices são visitados.
 Assim, a ordem de visita torna-se essencial se
desejamos determinar outras propriedades além da
mera característica de um determinado vértice ser
alcançado a partir de outro.
 Aplicações:
 Computação gráfica; Técnicas de verificação formal;
Compiladores; Resolução de problemas; ...
Prof. Luciana R. Cardoso
120
24/06/2018
61
Busca em Grafos
 O algoritmo de busca em grafos podem então nos
mostrar outras características de grafos.
 Os algoritmos mais comumente discutidos são os
algoritmos de busca em largura (Breadth-first
search - BFS) e de busca em profundidade (Depth-
first search - DFS), que serão apresentados a seguir
Prof. Luciana R. Cardoso
121
Busca em Largura (BFS)
 A principal característica desse algoritmo é que a
busca encontra primeiro todos os vértices que estão à
distância 1 da origem da busca, em seguida os que
estão à distância 2, e assim por diante.
 No algoritmo de busca em largura, a lista de vértices
obedece a política FIFO (First-In-First-Out): o
vértice que sai da lista é sempre o que está lá há mais
tempo.
 No exemplo a seguir, vamos supor que estejamos
buscando o caminho entre 1 e 5.
Prof. Luciana R. Cardoso
122
24/06/2018
62
Busca em Largura (BFS): Exemplo
 No início todos os vértices são pintados de branco.
 Para o exemplo o vértice de origem é o 1, sendo
marcado com “largura” igual a zero.
 O algoritmo pinta de cinza este vértice e o coloca em
uma fila Q.
Prof. Luciana R. Cardoso
123
Busca em Largura (BFS): Exemplo
 No próximo passo, o algoritmo retira o vértice 1 da
fila Q e pinta-o de preto
 O algoritmo inclui no fim da fila todos os nós
adjacentes ao vértice 1 e mapeando-os com “largura”
igual a 1. No caso, temos apenas o vértice 2. O vértice
2 é então pintado de cinza.
Prof. Luciana R. Cardoso
124
24/06/2018
63
Busca em Largura (BFS): Exemplo
 O vértice 2 é retirado da fila Q e pintado de preto,
enquanto os vértices 3 e 5 são colocados na fila Q e
mapeados com “largura” igual a 2.
 O vértice 1 não é colocado na fila (apesar de haver
uma conexão), pois já está pintado de preto.
Prof. Luciana R. Cardoso
125
Busca em Largura (BFS): Exemplo
 O vértice 3 é retirado da fila Q e pintado de preto,
enquanto o vértice 4 é colocado na fila Q e mapeado
com “largura” igual a 3.
Prof. Luciana R. Cardoso
126
24/06/2018
64
Busca em Largura (BFS): Exemplo
 Em seguida o vértice 5 também é visitado, pintado de
preto e retirado da fila Q. Como sua única conexão é
com o vértice 2 (já pintado de preto), nada é feito.
Prof. Luciana R. Cardoso
127
Busca em Largura (BFS): Exemplo
 No término da execução deste exemplo o vértice 4 é
pintado de preto e retirado da fila Q. Como suas
conexões levam a vértices já pintados de preto (1 e 5),
nada é feito e a fila torna-se vazia (fim do algoritmo).
Prof. Luciana R. Cardoso
128
24/06/2018
65
Busca em Largura (BFS): Exemplo
 Para o caminho entre origem e destino parte-se do
vértice de destino, examinado seus predecessores até
chegar à origem. Depois inverte-se o vetor
conseguido.
 Para este exemplo, o caminho é 1 →2→5. A seguir é
apresentado um pseudocódigo do algoritmo de busca
em largura.
Prof. Luciana R. Cardoso
129
Busca em Largura (BFS): Exemplo
Prof. Luciana R. Cardoso
130
24/06/2018
66
Busca em Largura (BFS): Exemplo
 a) Seleciona-se um vértice para iniciar o
caminhamento.
 b) Visitam-se os vértices adjacentes, marcando-os
como visitados.
 c) Coloca-se cada vértice adjacente numa fila.
 d) Após visitar os vértices adjacentes, o primeiro da
fila torna-se o novo vértice inicial. Reinicia-se o
processo.
 e) O caminhamento termina quanto todos os vértices
tiverem sido visitados ou o vértice procurado for
encontrado.
Prof. Luciana R. Cardoso
131
Busca em Largura (BFS): Exemplo
Prof. Luciana R. Cardoso
132
24/06/2018
67
Busca em Largura (BFS): Exemplo
Prof. Luciana R. Cardoso
133
Exercícios
 Simule o algoritmo de busca em largura no gráfico
abaixo, a partir do vértice 1, e determine:
 Qual a largura de cada vértice do grafo?
 Qual o caminho encontrado entre 1 e 5?
 Suponha que a lista de adjacências mantém os
vértices em ordem numérica, isto é, Adj[3] = {2,4}
Prof. Luciana R. Cardoso
13424/06/2018
68
Busca em Profundidade (DFS)
 A estratégia seguida pela busca em profundidade é, como
seu nome implica, procurar cada vez mais fundo no grafo.
 Nessa busca as arestas são exploradas a partir do vértice v
mais recentemente descoberto que ainda possui arestas
inexploradas saindo dele.
 A estratégia seguida pela busca em profundidade é, como
seu nome implica, procurar cada vez mais fundo no grafo.
 Nessa busca as arestas são exploradas a partir do vértice v
mais recentemente descoberto que ainda possui arestas
inexploradas saindo dele.
Prof. Luciana R. Cardoso
135
Busca em Profundidade (DFS)
 Quando todas as arestas alcançadas a partir do
vértice de origem são visitadas a busca regressa para
explorar as arestas que deixam o vértice do qual v foi
descoberto.
 Para o exemplo a seguir, tentaremos descobrir o
caminho de 1 a 5.
Prof. Luciana R. Cardoso
136
24/06/2018
69
Busca em Profundidade (DFS): Exemplo
 No início todos os vértices são brancos, mas partindo
do vértice 1, este é pintado de cinza e sua aresta é
examinada, levando ao vértice 2. O vértice 1 é
marcado com distância 0.
Prof. Luciana R. Cardoso
137
Busca em Profundidade (DFS): Exemplo
 O vértice 1 é pintado de preto. O vértice 2 é pintado
de cinza, enquanto suas arestas serão examinadas e é
atribuído a ele uma distância 1. A primeira aresta de
2 leva ao vértice 1, já pintado de preto. Partindo para
a segunda aresta, esta leva ao vértice 3.
Prof. Luciana R. Cardoso
138
24/06/2018
70
Busca em Profundidade (DFS): Exemplo
 O vértice 3 é então pintado de cinza e a ele é
atribuído uma distância 2. Sua única aresta é
examinada, levando ao vértice 4.
Prof. Luciana R. Cardoso
139
Busca em Profundidade (DFS): Exemplo
 O vértice 3 é pintado de preto e o vértice 4 é pintado
de cinza, sendo que a ele é atribuído uma distância 3.
Suas arestas serão examinadas. A primeira leva a um
nó já pintado de preto, logo não é analisada. A
segunda, leva ao vértice 5.
Prof. Luciana R. Cardoso
140
24/06/2018
71
Busca em Profundidade (DFS): Exemplo
 O vértice 4 é pintado de preto e o vértice 5 é pintado
de cinza, sendo que a ele é atribuído uma distância 4.
Sua aresta é examinada, constatando-se que leva a
um vértice já pintado de cinza.
Prof. Luciana R. Cardoso
141
Busca em Profundidade (DFS): Exemplo
 O vértice 5 é pintado de preto e parte-se para o
exame da última aresta pertencente ao vértice 2.
Prof. Luciana R. Cardoso
142
24/06/2018
72
Busca em Profundidade (DFS): Exemplo
 Como neste momento esta aresta remete a um
vértice já pintado de preto (vértice 5), o vértice 2
também é pintado de preto e o algoritmo é
terminado. Diferente da busca em largura, este
algoritmo produz um caminho 1 → 2 → 3 → 4 →5
para o caminho de 1 a 5.
Prof. Luciana R. Cardoso
143
Busca em Profundidade (DFS)
 Pesquisa em profundidade:
 Explora os vértices do grafo a partir de arestas não exploradas
ainda, mais fundo no grafo quanto possível.
 Quando todas as arestas de v tiverem sido exploradas, a
pesquisa volta para explorar outras arestas do vértice do qual v
foi descoberto.
 Processo continua até que todos os vértices alcançáveis a partir
de uma origem tenham sido descobertos.
 Se existe vértice não descoberto ainda então um novo vértice é
selecionado e o processo começa todo novamente.
Prof. Luciana R. Cardoso
144
24/06/2018
73
Busca em Profundidade (DFS)
 Para acompanhar o progresso do algoritmo cada vértice é
colorido de branco, cinza ou preto.
 Todos os vértices são inicializados branco.
 Quando um vértice é descoberto pela primeira vez ele
torna-se cinza, e é tornado preto quando sua lista de
adjacentes tenha sido completamente examinada.
 d[v]: tempo de descoberta
 t[v]: tempo de término do exame da lista de adjacentes de
v.
 Estes registros são inteiros entre 1 e 2jV j pois existe um
evento de descoberta e um evento de término para cada um
dos jV j vértices.
Prof. Luciana R. Cardoso
145
Busca em Profundidade (DFS)
 O algoritmo de busca em profundidade na sua forma mais
robusta utiliza um recurso computacional chamado
recursão, em que uma dada função “chama a si mesma”.
 Um pseudocódigo para o algoritmo de busca em
profundidade que encontra o caminho entre dois vértices é
mostrado a seguir.
 Claramente há uma grande diferença no modo de
implementação e nos resultados dos dois algoritmos.
 Desta forma, quando há a necessidade de obtenção do
caminho mínimo entre dois vértices, outros algoritmos
podem ser utilizados.
Prof. Luciana R. Cardoso
146
24/06/2018
74
Busca em Profundidade (DFS)
Prof. Luciana R. Cardoso
147
Busca em Profundidade (DFS)
 a) Seleciona-se um vértice para iniciar o caminhamento.
 b) Visita-se um primeiro vértice adjacente, marcando-o
como visitado.
 c) Coloca-se o vértice adjacente visitado numa pilha.
 d) O vértice visitado torna-se o novo vértice inicial.
 e) Repete-se o processo até que o vértice procurado seja
encontrado ou não haja mais vértices adjacentes. Se
verdadeiro, desempilha-se o topo e procura-se o próximo
adjacente, repetindo o algoritmo.
 f) O processo termina quando o vértice procurado for
encontrado ou quando a pilha estiver vazia e todos os
vértices tiverem sido visitados.
Prof. Luciana R. Cardoso
148
24/06/2018
75
Distância
 Um caminho C num grafo é mínimo se não existe
outro caminho com mesma origem e mesmo término
que C mas comprimento menor que o de C.
 A distância de um vértice s a um vértice t num grafo
é o comprimento de um caminho mínimo de s a t. Se
não existe caminho algum de s a t, a distância de s a t
é infinita.
 Em geral, num grafo direcionado a distância de um
vértice s a um vértice t é diferente da distância de t a
s. Se o grafo é não-orientado, entretanto, as duas
distâncias são iguais.
Prof. Luciana R. Cardoso
149
Algoritmos de Caminhos Mínimos
 O caminho de um vértice a outro vértice é mínimo se
não existe outro caminho entre eles que tenha menos
arcos.
 O problema de encontrar o caminho mais curto entre
dois nós de um grafo ou uma rede é um dos
problemas clássicos da Ciência da Computação. Este
problema consiste, genericamente, em encontrar o
caminho de menor custo entre dois nós da rede,
considerando a soma dos custos associados aos arcos
percorridos.
Prof. Luciana R. Cardoso
150
24/06/2018
76
Algoritmos de Caminhos Mínimos
 Grafos Ponderados: 
 Muitas aplicações associam um número a cada aresta de um
grafo. Diremos que esse número é o custo da aresta, que pode
ser remetido a uma característica física da conexão.
 Por exemplo, se duas arestas de um grafo representam
conexões de cabos óticos entre cidades A, B, e C (vértices do
grafo), sendo que a distância entre A e B é o dobro da distância
de A a C, então pode-se atribuir um custo maior à aresta que
liga os vértices A e B.
 Dependendo da aplicação, pode ser mais apropriado dizer
"peso" ou "comprimento" no lugar de "custo".
Prof. Luciana R. Cardoso
151
Algoritmos de Caminhos Mínimos
 Exemplo: Caminho de Custo Mínimo
 Se o grafo ponderado e direcionado abaixo for tomado como
exemplo, o caminho mínimo C de 1 a 5 tem custo d igual a 2,
levando a um caminho 1 → 2 → 5. Veja que existe um outro
caminho 1 → 2 → 3 → 4 → 5, mas este possui custo d igual
a 5.
Prof. Luciana R. Cardoso
152
24/06/2018
77
Algoritmos de Caminhos Mínimos
 Busca de Caminhos Mínimos
 Para a busca de caminhos mínimos em grafos há algoritmos
específicos que executam a tarefa.
 Entretanto há formas específicas para tratar o problema, sendo
diferentes quando busca-se caminhos mínimos a partir de um
dado vértice ou quando se buscam os caminhos mínimos entre
todos os pares de vértices.Prof. Luciana R. Cardoso
153
Algoritmos de Caminhos Mínimos
 O mais famoso algoritmo para resolver o problema
de caminho mínimo em grafos é o algoritmo de
Dijkstra (1959). Este algoritmo apenas funciona se
os custos associados aos arcos não forem negativos,
mas isso não é muito importante na maioria dos
problemas práticos pois, em geral, os custos
associados aos arcos são em geral grandezas
fisicamente mensuráveis.
Prof. Luciana R. Cardoso
154
24/06/2018
78
Algoritmo de Dijkstra
 Um algoritmo eficiente para o de obtenção do
caminho mínimo em grafos com custos não
negativos é o chamado algoritmo de Dijkstra.
 O algoritmo pode ser usado, em particular, para
encontrar um caminho de custo mínimo de um dado
vértice a outro, ou a todos os outros vértices.
 O algoritmo de Dijkstra funciona de forma iterativa,
passo a passo, como mostrado a seguir. A entrada é a
matriz de adjacências do grafo.
Prof. Luciana R. Cardoso
155
Algoritmo de Dijkstra
1. Como primeiro passo é atribuída uma distância para todos os pares
de vértices. De início é atribuída uma distância infinita para todos,
menos para o vértice de origem.
2. Marque todos os vértices como não visitados e defina o vértice inicial
como vértice corrente.
3. Para este vértice corrente, considere todos os seus vértices vizinhos
não visitados e calcule a distância a partir do vértice. Se a distância
for menor do que a definida anteriormente, substitua a distância.
4. Quando todos os vizinhos do vértice corrente forem visitados,
marque-o como visitado, o que fará com que ele não seja mais
analisado (sua distância é mínima e final).
5. Eleja o vértice não visitado com a menor distância (a partir do vértice
inicial) como o vértice corrente e continue a partir do passo 3.
Prof. Luciana R. Cardoso
156
24/06/2018
79
Algoritmo de Dijkstra
 Mantém um conjunto S de vértices cujos caminhos
mais curtos até um vértice origem já são conhecidos.
 Produz uma árvore de caminhos mais curtos de um
vértice origem s para todos os vértices que são
alcançáveis a partir de s.
 Utiliza a técnica de relaxamento:
 Para cada vértice v 2 V o atributo p[v] é um limite
superior do peso de um caminho mais curto do vértice origem
s até v.
 O vetor p[v] contém uma estimativa de um caminho
mais curto.
Prof. Luciana R. Cardoso
157
Algoritmo de Dijkstra
 O relaxamento de uma aresta (u; v) consiste em
verificar se é possível melhorar o melhor caminho
até v obtido até o momento se passarmos por u.
Prof. Luciana R. Cardoso
158
24/06/2018
80
Algoritmo de Dijkstra: Exemplo
 Para o exemplo a seguir, o vértice 1 é o vértice origem
e o vértice corrente do início do algoritmo. A
distância dele para todos os outros vértices é
mostrada em vermelho. A distância para seu vizinho
(vértice 2) é igual a 1.
Prof. Luciana R. Cardoso
159
Algoritmo de Dijkstra: Exemplo
 O vértice 2 passa a ser o vértice corrente. A partir
dele, atinge-se os vértices 3 e 5, sendo as respectivas
distâncias calculadas para 2 (ao invés de infinito) e 2.
Prof. Luciana R. Cardoso
160
24/06/2018
81
Algoritmo de Dijkstra: Exemplo
 O vértice 3 é o vértice corrente. A partir dele alcança-
se o vértice 4, com distância 4. Neste ponto todos os
vértices foram visitados e o vetor de distâncias
mínimas a partir do vértice 1 é D = [0 1 2 4 2].
Prof. Luciana R. Cardoso
161
Algoritmo de Dijkstra: Exemplo
 Pseudocódigo
Prof. Luciana R. Cardoso
162
24/06/2018
82
Algoritmo de Dijkstra: Exemplo
Prof. Luciana R. Cardoso
163
Algoritmo de Dijkstra: Exemplo
 Porque o Algoritmo de Dijkstra Funciona
 O algoritmo usa uma estratégia gulosa: sempre escolher o
vértice mais leve (ou o mais perto) em V - S para adicionar ao
conjunto solução S, O algoritmo de Dijkstra sempre obtém os
caminhos mais curtos, pois cada vez que um vértice é
adicionado ao conjunto S temos que p[u] = δ(Raiz; u).
Prof. Luciana R. Cardoso
164
24/06/2018
83
Algoritmo de Dijkstra: Exemplo
Prof. Luciana R. Cardoso
165
Mostrar o algoritmo para esse exemplo
Grafos Eulerianos
 É aquele que possui um ciclo que contem todas as
suas arestas. Este ciclo é dito ser um ciclo euleriano.
 O grafo da figura abaixo, é euleriano já que ele
contém o ciclo: (u1, u2, u3, u4, u5, u3, u1, u6, u2, u7, u3,
u6, u7, u1), que é euleriano
Prof. Luciana R. Cardoso
166
24/06/2018
84
Grafos Eulerianos
 Definição: Seja G um grafo. Um circuito
Euleriano é um circuito que contém cada vértice e
cada aresta de G. É uma sequência de vértices e
arestas adjacentes que começa e termina no mesmo
vértice de G, passando pelo menos uma vez por cada
vértice e exatamente uma única vez por cada aresta
de G.
Prof. Luciana R. Cardoso
167
Grafos Eulerianos
 Teorema: Se um grafo possui um circuito Euleriano,
então cada vértice do grafo tem grau par.
 Determine se o grafo abaixo tem um circuito
Euleriano. Em caso positivo ache um circuito
Euleriano para o grafo.
 Os vértices a, b, c, f, g, i, j têm grau 2.
 Os vértices d, e, h têm grau 4.
 Pelo teorema anterior, este grafo possui um circuito Euleriano.
Prof. Luciana R. Cardoso
168
24/06/2018
85
Grafos Eulerianos
 Teorema: Um grafo G tem um circuito Euleriano
sse G é c
 Definição: Seja G um grafo e seja v e w dois vértices
de G. Um Trajeto Euleriano de v para w é uma
sequência de arestas e vértices adjacentes que
começa em v, termina em w e passa por cada vértice
de G pelo menos uma vez e passa por cada aresta de
G exatamente uma única vez.onexo e cada vértice de
G tem grau par.
Prof. Luciana R. Cardoso
169
Grafos Eulerianos
 Exemplo: O grafo da Figura abaixo é euleriano, pois
nele podemos definir o circuito euleriano a, f ,b,c,e,d
,a,b,d,c,a .
Prof. Luciana R. Cardoso
170
24/06/2018
86
Grafos Eulerianos
 Exemplo: O grafo da Figura abaixo é
semi‐euleriano, pois nele podemos definir o trajecto
euleriano a,b,c,e,d,a,c,d,b .
Prof. Luciana R. Cardoso
171
Grafos Eulerianos
 O grafo da Figura abaixo não é euleriano nem
semi‐euleriano, pois não é possível definir, neste
grafo, um circuito ou um trajecto euleriano.
Prof. Luciana R. Cardoso
172
24/06/2018
87
Grafos Eulerianos
 Exemplo: Observe‐se o grafo G da Figura abaixo.
Pelo Teorema, facilmente se conclui que existe um
circuito de Euler.
Prof. Luciana R. Cardoso
173
Grafos Eulerianos
 Conclusão: dizemos que um grafo G com n vértices
e m arestas é Euleriano se ele possui uma trilha
fechada de mesmo comprimento m, começando e
terminado no mesmo vértice. Ou seja, percorrer o
grafo formando um ciclo fechado que utiliza cada
aresta uma única vez.
Prof. Luciana R. Cardoso
174
24/06/2018
88
Grafos Hamiltonianos
 Paralelamente à idéia dos grafos eulerianos, de
passar por cada aresta uma única vez, os grafos
hamiltonianos consistem em passar por cada
vértice uma única vez. Caminho hamiltoniano em
um grafo é o caminho que visita cada vértice
exatamente uma vez.
 Um ciclo hamiltoniano é um ciclo que visita cada
vértice uma só vez (uma trilha fechada que começa e
termina no mesmo vértice).
Prof. Luciana R. Cardoso
175
Grafos Hamiltonianos
 Recursos computacionais são necessários para testar
todas as possíveis soluções. Caso o problema
apresentar 20 vértices, o número de soluções
possíveis é 20!. Caso tenhamos 300 vértices teremos
300! soluções para testar, ou seja, quanto maior o
número de vértices maior será o tempo de verificar
qual das trajetórias hamiltonianas é a melhor. Até
hoje, não existe um algoritmo hamiltoniano capaz de
minimizar a solução. Todos os esforços de estudiosos
comprovam que isto não é possível.
Prof. Luciana R. Cardoso
176
24/06/2018
89
Grafos Hamiltonianos
 O problemado carteiro viajante representa um
problema Hamiltoniano, no qual um carteiro,
viajando por várias cidades uma única vez e
retornando à sua cidade de origem, percorrerá a
menor distância possível.
Prof. Luciana R. Cardoso
177
Grafos Hamiltonianos
 O Problema do Caixeiro Viajante
 Em inglês, Traveling Salesman Problem, ou TSP.
 Suponha o mapa abaixo mostrando quatro cidades (A,B,C,D) e
as distâncias em km entre elas.
 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
distância percorrida?
Prof. Luciana R. Cardoso
178
24/06/2018
90
Grafos Hamiltonianos
 O Problema do Caixeiro Viajante
 Possível solução:
 Enumere todos os possíveis circuitos Hamiltonianos começando e
terminando em A;
 Calcule a distância de cada um deles;
 Determine o menor deles.
Prof. Luciana R. Cardoso
179
Assim, tanto a rota ABCDA ou ADCBA tem uma distância total de 125 km.
Grafos Hamiltonianos
 A solução do TSP é um circuito Hamiltoniano que
minimiza a distância total percorrida para um grafo
valorado arbitrário G com n vértices, onde uma
distância é atribuída a cada aresta.
 Algoritmo para resolver o TSP:
 Atualmente, força bruta, como feito no
Prof. Luciana R. Cardoso
180
24/06/2018
91
Árvore
 Definição: Uma árvore (também chamada de
árvore livre) é um grafo não dirigido acíclico e
conexo.
Prof. Luciana R. Cardoso
181
Floresta
 Definição: Uma floresta é um grafo não dirigido
acíclico podendo ou não ser conexo.
Prof. Luciana R. Cardoso
182
24/06/2018
92
Árvore geradora
 Definição: Uma árvore geradora de um grafo G é
um grafo que contém cada vértice de G e é uma
árvore.
 Esta definição pode ser estendida para floresta
geradora.
 Proposição:
 Cada grafo conexo tem uma árvore geradora.
 – Duas árvores geradores quaisquer de um grafo têm a mesma
quantidade de arestas.
Prof. Luciana R. Cardoso
183
Árvore geradora
 Seja o grafo G abaixo
Prof. Luciana R. Cardoso
184
Este grafo possui o circuito v2v1v4v2.
A remoção de qualquer uma das três
arestas do circuito leva a uma árvore.
Assim, todas as três árvores geradoras são:
24/06/2018
93
Árvore geradora mínima ou
Minimal Spanning Tree
 O grafo de rotas da
companhia aérea que
recebeu permissão para
voar pode ser “rotulado”
com as distâncias entre
as cidades:
 Suponha que a
companhia deseja voar
para todas as cidades
mas usando um conjunto
de rotas que minimiza o
total de distâncias
percorridas:
Prof. Luciana R. Cardoso
185
Árvore geradora mínima
 Definição: Um grafo com peso é um grafo onde
cada aresta possui um peso representado por um
número real. A soma de todos os pesos de todas as
arestas é o peso total do grafo. Uma árvore
geradora mínima para um grafo com peso é
uma árvore geradora que tem o menor peso total
possível dentre todas as possíveis árvores geradoras
do grafo.
 Se G é um grafo com peso e e uma aresta de G então:
 w(e) indica o peso da aresta e, e
 w(G) indica o peso total do grafo G.
Prof. Luciana R. Cardoso
186
24/06/2018
94
Algoritmos para obter a árvore geradora 
mínima
 Algoritmo de Kruskal.
 Algoritmo de Prim.
Prof. Luciana R. Cardoso
187
Algoritmo de Kruskal
 Idéia básica:
 Seleciona a aresta de menor peso que conecta duas árvores de
uma floresta.
 Repita o processo até que todos os vértices estejam conectados
sempre
 preservando a invariante de se ter uma árvore.
Prof. Luciana R. Cardoso
188
24/06/2018
95
Algoritmo de Kruskal
Prof. Luciana R. Cardoso
189
Algoritmo de Kruskal
Prof. Luciana R. Cardoso
190
24/06/2018
96
Algoritmo de Prim
 Idéia básica:
 Tomando como vértice inicial A, crie uma fila de prioridades
classificada pelos pesos das arestas conectando A.
 Repita o processo até que todos os vértices tenham sido
visitados.
Prof. Luciana R. Cardoso
191
Algoritmo de Prim
Prof. Luciana R. Cardoso
192
24/06/2018
97
Exercícios
1 - Para o grafo G abaixo, descreva:
a) A matriz de incidencia M(G);
b) A matriz de adjacencia A(G).
Prof. Luciana R. Cardoso
193
Exercícios
2 - Aplique o algoritmo de Dijkstra no grafo
abaixo, considerando o vértice υ5 como raiz.
Mostrar todos os passos do algoritmo e, ao
final, indicar os caminhos de υ5 aos outros
vértices, destacando o custo total para cada
caminho.
Prof. Luciana R. Cardoso
194
24/06/2018
98
Exercícios
3 - Suponha que o grafo a seguir represente
ruas que ligam regiões de uma cidade, onde
os pesos das arestas são as distancias entre
as regiões. Sabe-se que o correio da cidade é
representado pelo vértice v2 e se sabe
também que o carteiro, ao sair da central de
correios, precisa cobrir todas as ruas,
passando por estas pelo menos uma vez e de
modo que seu percurso seja o menor
possível.
Prof. Luciana R. Cardoso
195
Exercícios
a) Mostre que o grafo abaixo e euleriano,
utilizando como base o que diz o teorema
sobre grafos eulerianos dado em sala de
aula.
b) Se o grafo e euleriano, e necessário
considerarmos os pesos para encontrar a
solução para o carteiro? Por que?
c) Se sua resposta acima foi “nao”, quando
então é necessário considerar os pesos?
Prof. Luciana R. Cardoso
196
24/06/2018
99
Exercícios
Prof. Luciana R. Cardoso
197
Exercícios
4 - Grafos hamiltonianos
 a) Mostre que o grafo abaixo e hamiltoniano,
utilizando o segundo teorema dado em sala
de aula sobre grafos hamiltonianos
Prof. Luciana R. Cardoso
198
24/06/2018
100
Exercícios
5 - Observe o grafo com bastante atenção e responda 
as questões abaixo:
Prof. Luciana R. Cardoso
199
Exercícios
 1. Vocês conseguem passar o lápis por toda a figura
sem levantar o lápis do papel e passar uma única vez
por cada aresta?
 2. Vocês começaram por qual vértice?
 3. Agora, determine o grau de cada vértice.
 4. Será que conseguem realizar a mesma atividade
começando por outro vértice?
 5. Podemos fazer a atividade partindo de qualquer
vértice? Por quê?
Prof. Luciana R. Cardoso
200
24/06/2018
101
Exercícios
6 - João é entregador de pizza. Com sua moto ele
calculou o tempo gasto (em minutos) para deslocar
nos pontos principais do bairro, como mostra a
Figura a seguir. Seu ganho é por entrega, ele tem que
entregar uma pizza na Buganville no 32, referência
em frente a Escola Ovidio.
a) Qual o melhor caminho que João terá que tomar? Ou
seja, qual o trajeto que gasta menos tempo?
Prof. Luciana R. Cardoso
201
Prof. Luciana R. Cardoso
202
24/06/2018
102
Exercícios
7 - Esta atividade foi proposta por Hamilton em 1856.
Este jogo tem o nome de "Icosain Game", que
consiste em descobrir uma maneira de sair de
Londres e viajar para as outras cidades do mundo
uma única vez, diferente das atividades Eulerianas,
que consiste em passar por cada aresta uma única
vez, você deverá passar por cada vértice uma única
vez, sempre retornando ao ponto de partida. Os
vértices são representações das cidades e as arestas
são como elas estão conectadas
Prof. Luciana R. Cardoso
203
Exercícios
Prof. Luciana R. Cardoso
204
24/06/2018
103
Exercícios
Prof. Luciana R. Cardoso
205

Continue navegando