Você está na página 1de 130

TEORIA DOS GRAFOS

A Teoria dos Grafos (TG) é uma área de estudo e pesquisa que possibilita
a resolução de problemas de diversos setores, como logística,
comunicações, tubulações, genética, química, entre outros. O objetivo
da TG é a representação de problemas, como por exemplo, as estruturas
matemáticas, chamadas de grafos, e a aplicação de soluções algorítmicas,
sempre considerando aspectos computacionais de desempenho, em tempo
de execução e armazenamento.
Neste livro, buscou-se um equilíbrio entre a teoria, necessária para o
entendimento matemático dos grafos, e os algoritmos, que levam em Razer Anthom Nizer Rojas Montaño
consideração sua composição computacional na solução de problemas.

Fundação Biblioteca Nacional

Razer Anthom Nizer Rojas Montaño


Código Logístico
ISBN 978-85-387-6636-0

59398 9 788538 766360


Teoria dos Grafos
Razer Anthom Nizer Rojas Montaño

IESDE BRASIL
2020
© 2020 – IESDE BRASIL S/A.
É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização por escrito do autor e do detentor dos
direitos autorais.
Projeto de capa: IESDE BRASIL S/A. Imagem da capa: EnvatoElements

CIP-BRASIL. CATALOGAÇÃO NA PUBLICAÇÃO


SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ
M765t

Montaño, Razer Anthom Nizer Rojas


Teoria dos grafos / Razer Anthom Nizer Rojas Montaño. - 1. ed. -
Curitiba [PR] : IESDE, 2020.
126 p. : il.
Inclui bibliografia
ISBN 978-85-387-6636-0

1. Teoria dos grafos. 2. Algoritmos I. Título.


CDD: 511.5
20-63940
CDU: 519.17

Todos os direitos reservados.

IESDE BRASIL S/A.


Al. Dr. Carlos de Carvalho, 1.482. CEP: 80730-200
Batel – Curitiba – PR
0800 708 88 88 – www.iesde.com.br
Razer Anthom Doutor em Ciência da Computação e mestre em
Informática pela Universidade Federal do Paraná (UFPR),
Nizer Rojas Montaño na área de inteligência computacional. Graduado
bacharel em Informática pela mesma instituição.
Atualmente, é professor do curso superior de
Tecnologia em Análise e Desenvolvimento de Sistemas
e coordenador acadêmico do Setor de Educação
Profissional e Tecnológica da UFPR. Tem experiência
nas áreas de análise, projeto e desenvolvimento de
software (com ênfase na plataforma Java e aplicações
corporativas), aprendizado de máquina (regressão,
classificação, clusterização, regras de associação,
linguagem R, avaliação de modelos), planejamento em
inteligência artificial (com ênfase em lógica matemática,
SAT, redes de Petri e raciocínio sobre ações) e aplicações
em mensuração florestal.
Vídeos
em
QR code!
Agora é possível acessar os vídeos do livro por
meio de QR codes (códigos de barras) presentes
no início de cada seção de capítulo.

Acesse os vídeos automaticamente, direcionando


a câmera fotográfica de seu smartphone ou tablet
para o QR code.

Em alguns dispositivos é necessário ter instalado


um leitor de QR code, que pode ser adquirido
gratuitamente em lojas de aplicativos.
SUMÁRIO
1 Introdução ao estudo dos grafos  9
1.1 História e teoria dos grafos  9
1.2 Noções e definições básicas  12
1.3 Tipos de grafos  14
1.4 Vizinhança e grau  17
1.5 Isomorfismo  21
1.6 Representação computacional   27
1.7 Aplicações dos grafos  29

2 Conectividade 34
2.1 Grafos conexos e componentes  34
2.2 Caminhos e circuitos  36
2.3 Subgrafos  40
2.4 Cortes  42

3 Caminho mínimo e árvores geradoras  51


3.1 Busca em grafos e árvore geradora  51
3.2 Árvore Geradora Mínima  62
3.3 Caminho Mínimo  65

4 Grafos eulerianos e hamiltonianos  74


4.1 Grafos eulerianos   74
4.2 Grafos hamiltonianos  84

5 Problemas em Grafos  97
5.1 Cliques e Conjuntos Estáveis  97
5.2 Cliques Máximas  101
5.3 Coberturas  104
5.4 Planaridade  106
5.5 Coloração  111

Gabarito   118
APRESENTAÇÃO
Vídeo A Teoria dos Grafos (TG) é uma área de estudo e pesquisa que
possibilita a resolução de problemas de diversos setores, como logística,
comunicações, tubulações, genética, química, entre outros. O objetivo da
TG é a representação de problemas, como por exemplo, as estruturas
matemáticas, chamadas de grafos, e a aplicação de soluções algorítmicas,
sempre considerando aspectos computacionais de desempenho, em
tempo de execução e armazenamento.
Na área de estudo dos grafos, pode-se abordar o assunto com viés
teórico ou algorítmico. Na abordagem teórica, tem-se um peso maior nos
aspectos matemáticos dos grafos, dos teoremas e das provas. Na abordagem
algorítmica, estudam-se os problemas, as maneiras de resolução (eficientes
ou não) e a implementação computacional dessas soluções.
Neste livro, buscou-se um equilíbrio entre a teoria, necessária para
o entendimento matemático dos grafos, e os algoritmos, que levam em
consideração sua composição computacional na solução de problemas.
Os capítulos estão organizados de modo a apresentar os conceitos e
problemas gradualmente.
Inicia-se com os conceitos básicos necessários para equalizar o
vocabulário e mostrar a estrutura matemática de um grafo, bem como sua
história. Na sequência, conceitos mais avançados são expostos e alguns
algoritmos são apresentados, além de teoremas pertinentes ao assunto.
Em suma, essa obra traz informações básicas para a compreensão geral da
Teoria dos Grafos em todas as áreas em que sua aplicação é possível.
Bons estudos!
1
Introdução ao estudo dos grafos
Neste capítulo, será introduzido o estudo sobre a teoria dos grafos, o
qual está organizado da seguinte maneira: na Seção 1.1 é apresentado o
surgimento da teoria dos grafos, mostrando que a alavanca para o seu
desenvolvimento foram problemas reais que os cientistas tiveram na épo-
ca. Na Seção 1.2 abordam-se as noções e definições básicas dos grafos,
sua caracterização matemática e sua representação gráfica. Na Seção 1.3
são mostrados os vários tipos de grafos e suas definições. Já os conceitos
de vizinhança, grau e caminhos serão tratados na Seção 1.4. Na Seção 1.5
exploram-se o conceito de isomorfismo em grafos e as suas caracterizações.
Para executar algoritmos em grafos, também será necessário o estudo
das representações computacionais, as quais estão descritas na Seção
1.6. Por fim, na Seção 1.7 são abordadas algumas aplicações de grafos em
problemas do mundo real.

1.1 História e teoria dos grafos


Vídeo Um grafo é uma estrutura que formaliza relações de interdependência exis-
tentes entre os elementos de um conjunto e que possui uma representação grá-
fica facilitadora do entendimento e desenvolvimento de alguns conceitos. Assim,
os componentes de um grafo que representam os elementos de um conjunto em
questão são diagramados como pontos e denominados como vértices ou nós. Para
representar as relações entre os elementos do conjunto, traçam-se setas interli-
gando os vértices, as quais são denominadas arestas ou arcos.

Os grafos podem ser usados para resolver problemas em diversas áreas, por
exemplo, na química, em que a estrutura de uma molécula pode ser represen-
tada por meio de um grafo; nas redes de rotas de transporte (estradas, logís-
tica etc.); nas redes de comunicações (rede de computadores local ou mesmo
na internet); na distribuição de produtos e serviços, caso das tubulações de gás,
água, petróleo etc.

De acordo com Szwarcfiter (2018), o estudo dos grafos surgiu com o proble-
ma das sete pontes de Königsberg. Em um artigo publicado por Leonhard Euler
(1707–1783), em 1736, o autor discorreu sobre o assunto, apresentando uma so-
lução negativa, a qual originou a teoria dos grafos. Königsberg – que até 1945 foi
território da Prússia – é uma cidade cortada pelo Rio Prególia, com duas grandes
ilhas e sete pontes entre elas. A região foi bombardeada durante a Segunda Guerra
Mundial e tomada pelos russos, quando foi renomeada para Kaliningrado. Durante

Introdução ao estudo dos grafos 9


esse período, duas das sete pontes existentes foram destruídas. Observe a seguir o
mapa das pontes em 1652 (as em vermelho foram destruídas).

Sergey Merkulov/Shutterstock
Em 1736, Euler provou que não havia a possibilidade de passar por todas essas
pontes sem repetir qualquer uma delas. Para comprovar essa tese, o estudioso
desenhou o problema das pontes usando um diagrama como este:

v1

v2 v4

v3

Grafo do problema das sete pontes de Königsberg

Euler descobriu que só seria possível passar por cada ponte uma única vez caso hou-
vesse nenhum ou dois pontos de onde saísse um número ímpar de caminhos. Assim,
para que fosse possível chegar em um ponto e depois sair por uma aresta diferente,
cada ponto deveria conter um número par de arestas (um para entrar, outro para sair).
Os dois pontos com número ímpar de caminhos representam o início e o final do per-
curso, pois não precisam de uma aresta para entrar e uma para sair. Se não houvesse
um número ímpar de caminhos, o percurso começaria e terminaria no mesmo ponto.

O autor, então, provou que para um grafo conexo ser euleriano, isto é, possuir
um ciclo que passe por todas as arestas de um grafo somente uma vez, iniciando
e terminando no mesmo vértice, todos os vértices precisam possuir um número
par de arestas incidentes. O artigo de Euler foi considerado o primeiro resultado da
teoria dos grafos, uma vez que continha o primeiro teorema provado dessa nova
área, o qual determinou um método para solucionar problemas desse tipo.

10 Teoria dos Grafos


Outros problemas também foram resolvidos pela teoria dos grafos, como a colo-
ração de mapas. Determinar o mínimo de cores necessário para se colorir o desenho
de um mapa era uma difícil missão, até que Francis Guthrie (1831–1899) conjecturou,
em 1852, que era preciso, no mínimo, quatro cores. Mas apenas em 1976 essa hipó-
tese foi comprovada por Kenneth Appel (1932–2013) e Wolfgang Haken (1928–), com
Saiba mais
a ajuda de um IBM 360. A solução de Appel e Haken foi a construção de um programa
que verificava todos os possíveis exemplos de mapas (1936 ao todo), sendo esse o IBM 360 é um mainframe lan-
çado pela empresa International
primeiro teorema matemático provado com o auxílio de um computador, o que tam-
Business Machines Corporation
bém gerou controvérsia. A descoberta ficou conhecida como o teorema das quatro (IBM) em 1964. Trata-se de um
cores. A figura a seguir mostra o mapa do Brasil colorido com quatro cores, sendo os dos primeiros computadores
fabricados com a utilização de
estados adjacentes coloridos com cores diferentes. circuitos integrados.

Filip Bjorkman/Shutterstock

Apesar de o artigo de Euler ser o primeiro resultado da teoria dos grafos, o ter-
mo foi utilizado pela primeira vez, com a conotação aqui apresentada, por James
Joseph Sylvester (1814–1897) e Arthur Cayley (1821–1895). Em 1857, os estudiosos
aplicaram os conceitos de grafos à química, enumerando isômeros de hidrocar-
bonetos, visto que toda molécula também pode ser representada por um diagra-
ma. O termo grafo apareceu nas palavras dos autores em um artigo publicado em
1878, no primeiro volume do American Journal of Mathematics Pure and Applied, na
revista Nature.
Glossário
Em 1859, William Rowan Hamilton (1805–1865) elaborou um jogo chamado caixeiro-viajante: representante
icosiano ou viagem à volta do mundo, inspirado pela prática de caixeiro-viajante. de vendas; uma pessoa que vendia
O objetivo era encontrar caminhos e circuitos no grafo dodecaédrico, satisfazendo produtos em outras cidades e que,
para isso, fazia muitas viagens.
determinadas condições, como achar um circuito que passasse uma única vez por
cada vértice do grafo (conhecido como caminho hamiltoniano).
Glossário
Em 1930, Kazimierz Kuratowski (1896–1980) encontrou uma condição dodecaedro: sólido contendo 12
necessária e suficiente para a planaridade de um grafo (desenhar um grafo com faces, limitado por polígonos, com
30 arestas e 20 vértices.
arestas que não se cruzam). Já o primeiro livro didático sobre grafos foi escrito por
Dénes König (1884–1944) em 1936.

Introdução ao estudo dos grafos 11


Filme Em 1962, Lester Randolph Ford (1886–1967) e Delbert Ray Fulkerson (1924–
No filme Gênio Indomável, 1976) desenvolveram a teoria dos fluxos em redes, um dos mais importantes resul-
Will Hunting (Matt Damon)
é faxineiro em uma univer- tados da teoria dos grafos. Esse estudo é muito usado hoje em dia na distribuição
sidade e possui um grande de energia, na capacidade de redes de computadores, entre outras aplicabilidades,
talento para a matemá-
tica. Em uma das cenas, possibilitando o mapeamento e a análise dos fluxos em redes.
o professor Lambeau
(Stellan Skarsgård) deixa
Atualmente, os grafos aparecem em várias áreas e modelam problemas di-
um problema de grafos versos. O mapeamento de amigos em uma rede social é um exemplo disso, sen-
no quadro como desafio
para seus alunos de
do os vértices as pessoas e as arestas a relação de amizade entre elas. A própria
pós-graduação e Hunting o internet pode ser vista como um grafo, em que cada dispositivo conectado é um
resolve, impressionando o
professor e seus alunos.
vértice e cada conexão, com ou sem fio, é uma aresta. Até mesmo aplicativos

Direção: Gus Van Sant Jr. Estados


de mapas usam algoritmos de grafos para traçar uma rota entre dois pontos e
Unidos: Miramax, 1997. calcular tempos de viagem. Redes de telefonia, saneamento básico, distribuição
de energia, transporte público, todos esses serviços são exemplos da aplicação
de grafos.

1.2 Noções e definições básicas


Vídeo Um grafo G é um par (V, A) em que V é um conjunto não vazio de vértices, tam-
bém representado por V (G), e A é um conjunto finito de arestas, também represen-
tado por A (G). Cada aresta é um par não ordenado (v, w) que pode ser denotado
como vw ou wv, sendo v, w ∈ V. Uma aresta vw incide em v e w, sendo estes pontas
da aresta (BOAVENTURA NETTO; JURKIEWICZ, 2009).

No geral, usa-se uma representação gráfica de um grafo para facilitar o entendi-


mento, por exemplo, o grafo G = (V, A):

V = {v1, v2, v3, v4, v5}

A = {(v1, v2), (v2, v3), (v2, v4), (v4, v5), (v2, v5), (v4, v4), (v1, v2)}

O grafo G pode ser visto da seguinte maneira:

Figura 1
Grafo G

v2
v3

v1 v5
v4

Fonte: Elaborada pelo autor.

Para facilitar o entendimento, pode-se nomear as arestas da seguinte forma:

V = {v1, v2, v3, v4, v5}

A = {a1, a2, a3, a4, a5, a6, a7}

Tal que: a1 = (v1, v2 ), a2 = (v2, v3 ), a3 = (v2, v4), a4 = (v4, v5), a5 = (v2, v5), a6 = (v4, v4), a7 = (v1, v2)

12 Teoria dos Grafos


Então, representa-se da seguinte maneira o que é chamado grafo rotulado:

Figura 2
Grafo com arestas nomeadas

v2
a2
v3
a7
a1 a5
a3

v1 v5
a4
v4

a6
Fonte: Elaborada pelo autor.
Se no grafo G todas as suas arestas (v, w) são tais que v ≠ w e não existem duas
arestas diferentes que incidem nos mesmos vértices, diz-se que o grafo é simples.
O grafo com arestas nomeadas (Figura 2) não é simples, pois tem duas arestas en-
tre os vértices v1 e v2, e o vértice v4 tem uma aresta com ele mesmo.

Se um grafo é simples e possui arestas entre todos os seus vértices é denomina-


do completo. Por exemplo, os grafos da Figura 3 são completos.

Figura 3
Grafos completos
v2
v2 v2 v1 v2

v1 v3

v1 v1 v3 v4 v3 v4 v5

Fonte: Elaborada pelo autor.

Assim, o grafo G = (V, A) é completo se A = V2, em que V2 representa o conjunto


de todos os pares não ordenados de elementos de V. Assim, G = (V, A) é completo
se, e somente se, v, w ∈ V, v ≠ w, a ∈ A, a = (v, w) (Figura 4).
A E

Figura 4 v2
Grafo completo

v1 v3

v4 v5
Fonte: Elaborada pelo autor.

Introdução ao estudo dos grafos 13


Livro Os grafos completos são também denominados Kn, em que n é o número corres-
O livro Uma Introdução pondente à quantidade de vértices. Assim, na Figura 3, tem-se K1, K2, K3, K4, K5.
Sucinta à Teoria dos Grafos
é uma leitura complemen- O complemento de um grafo G = (V, A) é o grafo G = (V, V2\A). Isto é, assumindo o
tar que reforça os concei-
tos básicos de grafos.
grafo completo formado por todos os vértices V, o grafo complemento G é formado

FEOFILOFF, P.; KOHAYAKAWA, Y.;


por todas as arestas resultantes da retirada das arestas A do grafo G.
WAKABAYASHI, Y. São Paulo: Edusp,
Por exemplo, seja o grafo G = (V, A), como na figura a seguir (Figura 5), seu com-
2011.
plemento (Figura 6) é o grafo G = (V, V2\A).

Figura 5 Figura 6
Grafo g Complemento do grafo g
v2
v2

v3
v3
v4
v4
v1
v1
v5
v5
Fonte: Elaborada pelo autor.
Fonte: Elaborada pelo autor.

Essas definições apresentadas servem de base para o estudo dos grafos. Por
meio delas, é possível elaborar problemas complexos de maneira correta, seguindo
o formalismo matemático.

1.3 Tipos de grafos


Vídeo Os grafos podem ser classificados em diversos tipos, de acordo com algumas
características específicas. Essas podem ser estruturais, sendo direcionamento das
arestas, ou na composição dos seus elementos, por exemplo, possuindo somente
um vértice e nenhuma aresta.

Relembrando a definição apresentada na Seção 1.2, um grafo simples não


possui laços, isto é, arestas com pontas no mesmo vértice, nem arestas diferen-
tes que incidem nos mesmos vértices, ou paralelas (Figura 7). Um pseudografo
é um grafo que contém laços; já um multigrafo é um grafo que contém arestas
paralelas.

Figura 7
Grafo simples

v2
v3

v1 v5
v4
Fonte: Elaborada pelo autor.

14 Teoria dos Grafos


Ademais, estendendo a definição dos grafos, pode-se ter grafos com arestas
direcionadas, em que uma aresta v, w conecta o vértice v a w e, portanto, é dife-
rente da aresta (w, v), que conecta o vértice w a v. Nesse caso, tem-se um grafo
orientado ou digrafo. Este último é representado graficamente com as arestas
contendo setas (Figura 8). Também, é possível que os grafos possuam valores
(pesos) nas arestas, sendo chamados, nesse caso, de grafo ponderado ou valora-
do, podendo ou não ser direcionado (Figura 9).

Figura 8 Figura 9
Digrafo ou grafo direcionado Grafo ponderado ou valorado

v2 v2
3 10
v3 v3

20
8
5

v1 v5 v1 v5
1
v4 v4

1
Fonte: Elaborada pelo autor. Fonte: Elaborada pelo autor.

Um grafo nulo é um grafo que possui um conjunto de vértices Figura 10


vazio, ou seja, G = (V, A), V = Ø. Já um grafo trivial possui apenas um Grafo regular

vértice e nenhuma aresta. v2

Um grafo regular é um grafo em que todos os vértices possuem


v3
o mesmo número de arestas incidentes (Figura 10).

Outros exemplos de grafos regulares podem ser vistos na figura a


seguir. É importante perceber, também, que qualquer grafo comple- v1
to é regular, como observado na Figura 2.
v4
Figura 11 Fonte: Elaborada pelo autor.
Grafos regulares

Fonte: Elaborada pelo autor.


Um grafo é conexo quando é possível estabelecer um caminho desde um vértice
até qualquer outro vértice passando por arestas. Todos os grafos apresentados até
agora são conexos, caso contrário, trata-se de um grafo desconexo. No exemplo a
seguir, o vértice v3 faz parte do grafo, mas não tem aresta com nenhum outro vértice.
Já na Figura 12-B, os vértices v3 e v5 possuem aresta entre si, mas não aresta com a
outra parte do grafo, sendo, também, desconexo.

Introdução ao estudo dos grafos 15


Figura 12
Grafo desconexo
A – Exemplo de grafo com um vértice desconexo. B – Grafo com um subgrafo desconexo.

v2 v2
v3 v3

v1 v5 v1 v5
v4 v4

Fonte: Elaborada pelo autor.

Um grafo é dito acíclico se não possui ciclos, isto é, quando não é possível caminhar
de um vértice a vértices adjacentes até retornar à origem. O grafo simples da Figura 7 é
cíclico, visto que se pode caminhar de v2 até v4 por uma aresta, então de v4 a v5 por ou-
tra aresta e de v5 até v2. Caso contrário, é chamado de grafo acíclico, como na Figura 13.

Figura 13
Grafo acíclico

v2
v3

v1 v5
v4
Fonte: Elaborada pelo autor.

Chama-se árvore um grafo simples, acíclico e conexo. Simples significa que não
pode ter laços nem arestas paralelas; acíclico indica que não é possível caminhar
entre os vértices partindo de v e chegando novamente em v; e conexo determi-
na que todos os vértices precisam ser atingíveis por qualquer vértice. O grafo da
Figura 13 também é uma árvore.

Se o grafo for simples, acíclico, mas não conexo, é chamado de floresta, isto é,
uma união disjunta de árvores. A Figura 14 apresenta uma floresta formada por
três árvores.

Figura 14
Grafo floresta
v2 v6
v3

v7
v9
v1 v5
v4 v8
Fonte: Elaborada pelo autor.

16 Teoria dos Grafos


Um grafo é chamado bipartido por ser separado em dois conjuntos de vérti-
ces, V1 e V2, de modo que não haja arestas entre elementos do mesmo conjunto
e que toda aresta de G una um vértice de V1 a outro de V2. Por exemplo, o grafo
da Figura 15 é bipartido, pois é possível separar seus vértices em dois conjuntos
V1 = {v1, v2} e V2 = {v3, v4, v5} sem que haja arestas entre {v1, v2}, nem arestas entre
{v3, v4, v5} e todas as arestas conectam vértices de V1 e V2, ou seja, (v, w) ∈ A, v ∈
A

V1 e w ∈ V2. A Figura 16 apresenta os subconjuntos V1 e V2.

Figura 15 Figura 16
Grafo bipartido Grafo bipartido com os subconjuntos

v1 v2
v1 V1
v2

v3 v4 v5
v3 v4 v5 V2
Fonte: Elaborada pelo autor.

Fonte: Elaborada pelo autor.

Um grafo bipartido completo é um grafo bipartido em que há arestas en-


tre todos os elementos de V1 e V2. Assumindo |V1| = m e |V2| = n, então, o
grafo é denotado Km,n. Na Figura 17, pode-se observar alguns grafos bipartidos
completos.
Figura 17
Grafos bipartidos completos

K1,3 K2,3 K3,3


Fonte: Elaborada pelo autor.

Artigo

https://www.ime.usp.br/~pf/algoritmos_para_grafos/

O artigo Algoritmos para Grafos em C via Sedgewick, de Paulo Feofiloff, apresenta uma vasta
gama de materiais básicos e avançados sobre grafos, todos com base no volume Graph
Algorithms, da terceira edição do livro Algorithms in C, de Robert Sedgewick, que é um clássico
na ciência da computação.

Acesso em: 14 abr. 2020.

1.4 Vizinhança e grau


Vídeo Nesta seção serão apresentados alguns conceitos referentes à vizinhança e ao
grau, que darão base para o estudo de problemas mais complexos.

O número de vértices de um grafo (G = (V, A)) é representado por |V|, sendo a


quantidade de elementos de V (G) denominada ordem do grafo G. Já o número de

Introdução ao estudo dos grafos 17


arestas de um grafo é representado por |A|, sendo a quantidade de elementos de
A (G) denominada dimensão do grafo G.

Por exemplo, qual a ordem e a dimensão do grafo da figura a seguir?

Figura 18
Grafo G com arestas

v2
a5
v3

a4 a1
a2

v1 v5
a3
v4
Fonte: Elaborada pelo autor.

Pode-se visualizar, na Figura 18, a ordem cinco (quantidade de vértices) e a di-


mensão cinco (quantidade de arestas).

Dados dois vértices v e w e a aresta a = vw que os conecta, diz-se que a aresta


a incide em v e incide em w. Considerando o grafo da Figura 18, a aresta a1 incide
sobre os vértices v2 e v5.

O par de vértices v e w é dito adjacente se conectado por uma aresta. Duas ares-
tas são adjacentes quando incidem em um mesmo vértice. Por exemplo, no grafo
da Figura 18, os vértices v4 e v3 não são adjacentes, pois não possuem uma aresta
que os conecta. As arestas a2 e a4 são adjacentes, pois incidem no mesmo vértice v2.

A vizinhança de um vértice é o conjunto de vértices adjacentes a v, denotado


por vizinhos (v), sendo v não incluído nesse conjunto. A vizinhança fechada é o
conjunto vizinhos [v] que é o conjunto vizinhos (v), incluindo-se v.

Analisando o grafo da Figura 18, é possível perceber que a vizinhança de v2 são


os vértices adjacentes a v2, nesse caso, {v1, v3, v4, v5}. Já a vizinhança fechada de v2 é
a sua vizinhança incluindo v2, ou seja, {v1, v2, v3, v4, v5}.

O grau de um vértice é o número de arestas incidentes em v, denotado por


grau (v). Um vértice que possui grau zero é chamado isolado. No grafo da Figura 18
não há nenhum vértice isolado (grau zero); já o grau do vértice v3 é um e o grau do
vértice v4 é dois.

O grau de um grafo G é a soma dos graus de todos os seus vértices, denotado


por d (G). Pode-se demonstrar facilmente com o seguinte teorema:

Seja G = (V, A) um grafo não orientado, então:

d (G) = ∑v∈V grau (v) = 2 * |A|

Para saber o grau de um grafo, deve-se somar o grau de todos os seus vértices,
isto é, a quantidade de arestas incidentes em cada vértice. Como cada aresta incide
sobre dois vértices, cada aresta é sempre considerada duas vezes. Assim, o grau do
grafo é o dobro do número de arestas.
O grau máximo de um grafo é o grau do vértice de maior grau em V (G), deno-
tado por ∆ (G). Já o grau mínimo de um grafo é o grau do vértice de menor grau em
V (G), denotado por δ (G).
18 Teoria dos Grafos
O grau do grafo da Figura 18 é dez, pois é a soma dos graus de todos os vértices.
Percebe-se que é, também, igual ao dobro do número de arestas. O seu grau má-
ximo é quatro, pois é o grau do vértice que contém o maior grau, que, nesse caso,
é v2. Já o grau mínimo é um, pois v1 e v3 são os vértices com menor grau.
Uma sequência de vértices v1,...,vk, tal que (vi, vi+1) ∈ A, 1 ≤ i < k, é denominada
caminho ou passeio, quando v1 atinge ou alcança vk. Diz-se, ainda, que vk é atingível
ou alcançável. Um caminho de k vértices é formado por k – 1 arestas, e o valor k – 1
revela o tamanho do caminho. Um ciclo é um caminho que começa e termina no
mesmo vértice.

Quando um caminho passa por todos os vértices do grafo, sem repetição, é


chamado de caminho hamiltoniano. Este, se for um ciclo, então, é denominado de
ciclo hamiltoniano, e o grafo que contém um ciclo hamiltoniano é conhecido como
grafo hamiltoniano.

Já quando um caminho passa por todas as arestas do grafo, sem repetição, é


chamado de caminho euleriano. Este, se for um ciclo, então, é denominado de ciclo
euleriano, e grafo que contém um ciclo euleriano é conhecido como grafo euleriano.

No grafo da Figura 18, v1 é alcançável por meio de v5, pois consegue um caminho
partindo de v5 e chegando a v1, por exemplo, v5, v4, v2 e v1. O tamanho desse caminho
é três, que é o número de arestas presentes.

A distância entre dois vértices, denotada por d (v, w), é o comprimento do


menor caminho entre v e w. A excentricidade de um vértice de um grafo é o valor
máximo da distância entre v e w para todo vértice w ∈ V. Define-se como centro de
G o subconjunto dos vértices de excentricidade mínima.

Assim, a distância entre os vértices v1 e v5, no grafo da Figura 18, denotada por
d (v1, v5), é dois, pois, apesar de haver dois caminhos entre v1 e v5 – a saber, (v1, v2, v4,
v5) e (v1, v3, v5) – o de menor comprimento é o último, que é dois.

Os grafos direcionados (digrafo), conforme apresentado anteriormente, são


aqueles em que as arestas são direcionadas, ou seja, são pares ordenados de
vértices. Então, sendo G um grafo direcionado, a aresta (v, w) possui uma única
direção de v para w.

Define-se, também, o grau de saída de um vértice como sen-


do o número de arestas que saem de v, e o grau de entrada de Figura 19
Digrafo
um vértice como sendo o número de arestas que chegam em v.

Se um vértice no grafo G possui grau de entrada nulo, então, v2


3 10
é chamado de fonte. Se possui grau de saída nulo, é chamado de v3
sumidouro. 20
8
O grafo da Figura 19 é um digrafo. O vértice v2 possui grau de 5
saída dois e grau de entrada três; o vértice v3 é uma fonte, pois v5
v1
não possui arestas de entrada; e o vértice v5 é um sumidouro, 1
v4
pois não possui arestas de saída.

Os conceitos de caminho e alcançabilidade de vértices tam-


bém se aplicam aos digrafos, sempre levando em consideração
1
as direções das arestas. Se um vértice alcançar todos os vértices, Fonte: Elaborada pelo autor.

então, v é chamado de raiz do digrafo.

Introdução ao estudo dos grafos 19


Analisando-se o grafo da Figura 19, o vértice v1 é alcançável por meio de v3, pois
há o caminho (v3, v2, v1). Já o vértice v4 não é alcançável por v3, pois não há caminho
partindo de v3 que chega em v4, seguindo as orientações das arestas. Pelas particu-
laridades desse grafo, nenhum de seus vértices consegue alcançar todos os outros,
portanto, não há raiz.

Seja G um digrafo, o grafo obtido pela retirada de todas as direções das arestas
de G é um multigrafo não direcionado, conhecido como grafo subjacente de G.

O grafo subjacente do grafo da Figura 19 é o grafo da Figura 20.

Figura 20
Grafo subjacente

v2
3 10
v3

20
8
5
v1 v5
1
v4

1
Fonte: Elaborada pelo autor.

Conforme apresentado anteriormente, uma árvore é um grafo sem ciclos


(acíclico) e conexo (todas as arestas são alcançáveis). Se algum vértice possuir grau
menor ou igual a um é chamado de folha, caso contrário, com grau maior que um,
é denominado de vértice interior.

Percebe-se que toda árvore com n vértices possui exatamente n – 1 arestas.


Assim, um grafo T é uma árvore se, e somente se, existir um único caminho entre
cada par de vértices de T.

Uma árvore T = (V, A) é dita enraizada quando algum vértice v ∈ V é escolhido,


portanto, chamado de raiz da árvore. Uma árvore não enraizada é conhecida como
árvore livre.

Seja a árvore T = (V, A) enraizada, de raiz r, sendo dois vértices v, w ∈ V. Se v per-


tence ao caminho entre r e w, então, v é chamado ancestral de w, e w é descendente
de v. Se v ≠ w, v é ancestral próprio de w, e w é descendente próprio de v. Se (v, w)
é uma aresta de T e v é ancestral de w, então, v é pai de w, e w é filho de v. Dois
vértices que possuem o mesmo pai são chamados de irmãos. Assim, a raiz de uma
árvore não possui pai, e todo vértice que não é raiz tem exatamente um pai.

Um vértice folha não possui filhos. O nível de um vértice v, denotado por nível (v),
é o número de vértices do caminho entre a raiz e v. Assim, se r é raiz de uma árvore
T, nível (r) = 1. Se dois vértices são irmãos, então, possuem o mesmo nível. A altura
da árvore T é o valor máximo de nível (v) para todo vértice v ∈ T.

20 Teoria dos Grafos


O grafo da Figura 21 é uma árvore, pois é um grafo ací- Figura 21
clico e conexo. Os vértices v3, v7, v6 e v8 possuem grau ≤ 1, Árvore
v8
portanto, são vértices folha. Já os vértices v1, v2, v4 e v5 são v2
vértices interiores. Como essa árvore possui oito vértices, v3
ela também conta com exatamente sete arestas.

Pode-se escolher o vértice v2 para ser a raiz dessa árvore,


chamando-a, portanto, de árvore de enraizada. Assim, diz-se
v1 v5
que v4 é ancestral de v8, pois está no caminho entre a raiz (v2) e
v8. O vértice v8 também é conhecido como descendente de v4. v4

Já o vértice v4 é pai dos vértices v5 e v6, pois existem ares-


tas (v4, v5) e (v4, v6), sendo v4 ancestral de v5 e de v6. Os vérti- v6
ces v5 e v6, portanto, são filhos de v4. Já os vértices v6 e v5, por v7
possuírem o mesmo pai, são irmãos. Fonte: Elaborada pelo autor.

O valor de nível (v2), por ser a raiz, é um. O nível (v6) é


três, pois tem-se três arestas entre a raiz (v2) e v6. A altura da árvore da Figura 21 é
três, pois dentro todos os vértices v8 têm valor de nível (v8) = 4.

1.5 Isomorfismo
Vídeo Como foi visto, é comum referir-se a um grafo por meio de sua representação
gráfica ou geométrica. Dessa forma, dois grafos são isomorfos entre si se suas re-
presentações geométricas se referem ao mesmo grafo. De outra forma, dois grafos
são isomorfos entre si se existe correspondência entre seus vértices e suas arestas,
preservando as adjacências entre os vértices.

Assim, dados dois grafos G1 = (V1, A1) e G2 = (V2, A2), tal que |V1| = |V2| = n,
ambos são isomorfos se existe uma função unívoca (com somente uma correspon-
dência) f : V1 → V2, tal que (v, w) ∈ A1 se, e somente se, (f (v), f (w)) ∈ A2 para todo
v, w ∈ V11 (RODRIGUES, 2014).

Figura 22
Grafos isomorfos entre si

v2 a4
a2
v3

a3
v1

v4 a1

G1 G2
Fonte: Elaborada pelo autor.

Introdução ao estudo dos grafos 21


Na Figura 22, os dois grafos G1 = (V1, A1) e G2 = (V2, A2) são isomorfos entre si, pois:

V1 = {v1, v2, v3, v4}

A1 = {(v2, v3), (v1, v2), (v4, v2), (v1, v4)}

V2 = {a1, a2, a3, a4}

A2 = {(a1, a4), (a1, a2), (a1, a3), (a3, a2)}

|V1| = |V2| = 4

f : V1 → V2 tal que:
• f (v1) = a3
• f (v2) = a1
• f (v3) = a4
• f (v4) = a2
Assim como as arestas são preservadas da seguinte forma:

(v2, v3) = (a1, a4)

(v1, v2) = (a1, a3)

(v4, v2) = (a1, a2)

(v1, v4) = (a3, a2)

Uma das maneiras de se caracterizar o isomorfismo entre grafos é usando o


Teorema de Whitney, que se baseia no conceito de grafos linha e é formulado da
seguinte forma: dois grafos conexos G e H são isomorfos entre si se, e somente se,
seus grafos linha L (G) e L (H) são isomorfos. Para esse teorema, tem-se duas exce-
ções, a saber: K3 (grafo completo com três vértices) e K1,3 (grafo bipartido completo),
pois não são isomorfos, mas seus grafos linha, L (K3) e L (K1,3), são.

Para entender esse teorema, deve-se primeiramente definir um grafo linha. O


grafo linha de G, denotado por L (G) = (V’, A’), é o grafo em que seus vértices (V’) são
as arestas de G, e existe aresta ab ∈ A’ em L (G) se a e b possuírem um vértice em
comum em G.

Por exemplo, observe a figura a seguir.

Figura 23
Grafo G
v2
a3 v3
a4

a2
v1
a1
v4
Fonte: Elaborada pelo autor.

Para encontrar o grafo linha do grafo G, L (G), é preciso seguir os passos:


1. Encontrar os vértices de L (G); cada aresta de G é representada por um vértice
em L (G), conforme a Figura 24.

22 Teoria dos Grafos


Figura 24
Vértices de L (G) que são as arestas de G

v2
a3 v3 a3 a4
a4

a2
v1
a1
v4
a1 a2

Fonte: Elaborada pelo autor.

2. Encontrar o primeiro vértice de L (G); como a3 e a2 possuem o vértice v3 em


comum, adiciona-se uma aresta entre a3 e a2 em L (G), conforme a Figura 25.

Figura 25
Primeiro vértice de L (G)

v2
a3 v3 a3 a4
a4

a2
v1
a1
v4
a1 a2
Fonte: Elaborada pelo autor.

3. Encontrar o segundo vértice de L (G); como a4 e a3 possuem o vértice v2 em


comum, adiciona-se uma aresta entre a4 e a3 em L (G), conforme a Figura 26.

Figura 26
Segundo vértice de L (G)

v2
a3 v3 a3 a4
a4

a2
v1
a1
v4
a1 a2
Fonte: Elaborada pelo autor.

Introdução ao estudo dos grafos 23


4. Encontrar o terceiro vértice de L (G); como a1 e a2 possuem o vértice v4 em
comum, adiciona-se uma aresta entre a1 e a2 em L (G), conforme a Figura 27.

Figura 27
Terceiro vértice de L (G)

v2
a3 v3 a3 a4
a4

a2
v1
a1
v4
a1 a2

Fonte: Elaborada pelo autor.

5. Encontrar o quarto vértice de L (G); como a1 e a4 possuem o vértice v1 em


comum, adiciona-se uma aresta entre a1 e a4 em L (G) a3, conforme a Figura 28.

Figura 28
Quarto e último vértice de L (G)

v2
a3 v3 a3 a4
a4

a2
v1
a1
v4
a1 a2

Fonte: Elaborada pelo autor.

6. Por fim, o grafo L (G) é o grafo representado pela Figura 29.

Figura 29
Grafo L(G)

a3 a4

a1 a2

Fonte: Elaborada pelo autor.

Desse modo, pelo Teorema de Whitney, dois grafos G e H são isomorfos se, e
somente se, L (G) e L (H) são isomorfos. Usando o exemplo da Figura 22, tem-se os
grafos linha de G1 e G2 representados na Figura 29.

24 Teoria dos Grafos


Seja V (L (G1)) e V (L (G2)) o conjunto de vértices de L (G1) e L (G2), respectivamente.
Claramente, os grafos L (G1) e L (G2) são isomorfos, pois conseguem uma função
f : V (L (G1)) → V (L (G2)), tal que:

f (a1) = e2

f (a2) = e4

f (a3) = e1

f (a4) = a3

Tal que:

(a1, a2) = (e2, e4)

(a2, a4) = (e4, e3)

(a3, a4) = (e1, e3)

(a1, a4) = (e2, e3)

(a3, a2) = (e1, e4)

Portanto, G1 e G2 são isomorfos.

Figura 30
Grafos L (G1) e L (G2)

v2
a1 a1 a2
v3

a2
a4

v1
a3 a3 a4
v4

G1 L (G1)

a4 e1 e2
a2
e2

a3 e1
e3
e4
e3 e4

a1
L (G2)
G2
Fonte: Elaborada pelo autor.

Os grafos G3 e G4 da Figura 31 possuem o mesmo número de vértices e o mes-


mo número de arestas, mas não são isomorfos.

Introdução ao estudo dos grafos 25


Figura 31
Grafos G3 e G4

v1 w1 b2 w3

a2
a1
b1 b3
v2 a4 v3
a3
w2 b4 w4
v4

G3 G4
Fonte: Elaborada pelo autor.

Ao representar seus grafos linha, obtém-se L (G3) e L (G4), conforme a Figura 32.
Figura 32
Grafos linha L (G3) e L (G4)
v1 a1 a2
a2
a1
v2 a4 v3
a3
v4 a3 a4

G3 L(G3)

w1 b2 w3 b1 b2

b1 b3

w2 b4 w4 b3 b4

G4 L(G4)

Fonte: Elaborada pelo autor.

Claramente, L (G3) e L (G4) não são isomorfos, pois não possuem o mesmo nú-
mero de arestas.

Uma solução algorítmica para isomorfismo é analisar cada uma das n! permu-
tações da função que define o isomorfismo (buscar todas as funções possíveis). O
problema é que, no pior caso, esse algoritmo necessita de n! passos, sabidamente
intratáveis. Hoje, não se conhece um algoritmo eficiente para o problema geral do
isomorfismo em grafos.

26 Teoria dos Grafos


1.6 Representação computacional
Vídeo Um grafo G = (V, A) é dito esparso se |A| é muito menor que |V|2. Se |A| está
próximo de |V|2 é dito que o grafo é denso.

Tem-se basicamente três formas padrão de se representar computacionalmente


um grafo: lista de adjacências, matriz de adjacências e matriz de incidências.

Na lista de adjacências armazena-se uma lista para cada vértice, e, em cada


Figura 33 lista, referenciam-se os vértices que são adjacentes.
Lista de
adjacências
v2
v3 v1 v2

v2 v1 v3 v4 v5

v3 v2

v1 v5 v4 v2 v5
v4 v5 v2 v4
Fonte: Elaborada pelo autor.
Na Figura 33, o vértice v2 é representado por uma posição na lista. Esta possui
uma lista de todos os vértices adjacentes a v2, no caso, v1, v3, v4 e v5.

Se o grafo for orientado (digrafo), a representação pode ser a mesma, como vis-
to na Figura 34. A diferença é que a vizinhança representada na lista é dada pelos
vértices atingíveis por arestas de saída.

Figura 34
Lista de adjacências em grafo orientado

v2
v3 v1 v2

v2 v4 v3

v3
v1 v5
v4 v5
v4
v4
v5
v4

Fonte: Elaborada pelo autor.

Ao se analisar as listas de adjacências apresentadas, percebe-se que a soma dos


comprimentos de todas as listas de adjacências para um grafo não orientado é o
dobro do número de arestas, 2 * |A|, visto que cada aresta incide em dois vértices
e que, portanto, precisa ser representada duas vezes. Já para o grafo orientado,
essa soma é o número exato de arestas, isto é, |A|.

Na matriz de adjacências representa-se a estrutura do grafo G = (V, A) como


uma matriz com dimensões |V| x |V|, em que cada posição aij é dada por:

Introdução ao estudo dos grafos 27


1, se a aresta (i, j) ∈ A
aij=
0, caso contrário

Com essa representação, consultar se uma aresta faz parte do gráfico é feito em
tempo constante.

Figura 35
Matriz de adjacências

v2
v1 v2 v3 v4 v5
v3
v1 0 1 0 0 0
v2 1 0 1 1 1
v3 0 1 0 0 0
v4 0 1 0 0 1
v1 v5
v5 0 1 0 1 0
v4
Fonte: Elaborada pelo autor.

Na Figura 35 tem-se a matriz de adjacências representada no grafo. A quantida-


de de memória necessária para compor a matriz tem limite assintótico restrito no
quadrado do número de vértices, portanto, Θ (V2).

Como o grafo é não direcionado, percebe-se que a matriz é igual à sua trans-
posta, representando-se, portanto, somente os elementos abaixo da diagonal
principal.

Figura 36
Matriz de adjacências de um grafo orientado

v2
v3
v1 v2 v3 v4 v5
v1 0 1 0 0 0
v2 0 0 1 1 0
v1 v5 v3 0 0 0 0 0
v4 0 0 0 1 1
v4 v5 0 1 0 0 0

Fonte: Elaborada pelo autor.


A Figura 36 apresenta a matriz de adjacências de um grafo orientado (digrafo).
Percebe-se que, como as arestas são orientadas, a matriz não é igual à sua trans-
posta, pois uma aresta (v, w) não é a mesma que (w, v). Essa representação é ideal
para grafos densos.

Outra forma matricial de representação de grafos é a matriz de incidências.


Para o grafo G = (V, A), define-se como uma matriz com dimensões |V| x |A|, em
que cada posição aij é dada por:
1, se a aresta j incide no vértice i
aij=
0, caso contrário

28 Teoria dos Grafos


Figura 37
Matriz de incidências

v2 a3
v3
a1 a2 a3 a4 a5 a6
a6 a1
a2 v1 0 0 0 0 0 1
v2 1 1 1 0 0 1
v1 v5 v3 0 0 1 0 0 0
a4 v4 1 0 0 1 1 0
v4
v5 0 1 0 1 0 0

a5
Fonte: Elaborada pelo autor.

A Figura 37 mostra a matriz de incidências de um grafo. Cada coluna represen-


ta uma aresta e cada linha um vértice. As arestas contam com duas incidências,
exceto a aresta a5, que é um laço. Para representar a matriz de incidências de um
digrafo, pode-se optar pela seguinte definição:
1, se a aresta j incide no vértice i
aij=
–1, se a aresta j sai do vértice i
0, caso contrário

Essa representação pode ser observada na Figura 38.

Figura 38
Matriz de incidências em digrafo

v2 a3
v3 a1 a2 a3 a4 a5 a6

a6 a1 v1 0 0 0 0 0 –1
a2 v2 –1 1 –1 0 0 1
v3 0 0 1 0 0 0
v1 v5
v4 1 0 0 –1 1 0
a4
v4 v5 0 –1 0 1 0 0

a5
Fonte: Elaborada pelo autor.

1.7 Aplicações dos grafos


Vídeo Muitos problemas do mundo real, para serem resolvidos, são transformados
em problemas de grafos. Essa comutação pode fornecer um ponto de vista diferen-
te sobre o problema, tornando-o mais simples e abrindo um leque de técnicas para
a solução. Um exemplo disso foi o problema do caixeiro-viajante – ou TSP (Travelling
Salesman Problem) –, no qual tentava-se resolver como esse profissional, que preci-
sava visitar várias cidades, poderia fazer isso para efetuar suas vendas. As cidades
eram conectadas por estradas ou rodovias, sempre aos pares. Para maximizar seus

Introdução ao estudo dos grafos 29


lucros, o caixeiro-viajante devia visitar todas as cidades somente uma vez e pela
rota mais curta. Ou seja, ele precisava de um caminho ótimo passando por todas
as cidades, sem repeti-las.

O TSP é um problema NP-Completo, isto é, faz parte da classe de problemas


mais difíceis em NP, e NP é a classe de problemas que podem ser resolvidos em
tempo polinomial, em uma Máquina de Turing Não Determinística. Atualmente, as
soluções para os problemas NP-Completos levam um tempo exponencial em rela-
ção à entrada. Por exemplo, no caso do TSP, a solução mais simples é enumerar
todas as rotas possíveis e escolher. No caso de n cidades, havendo estradas entre
todas elas, deve-se efetuar (n – 1)! escolhas.

Suponha um computador que pode efetuar 1 trilhão de adições por segundo

(1012), isto é, 1 teraflop. Para um problema com cinco cidades, n = 5, a máquina é capaz
1012
de avaliar = 250 bilhões de rotas por segundo. Como ele precisa calcular 4! rotas,
4
demorará 4!/(250 bilhões) = 0,000000000096 segundos, um tempo insignificante.

Efetuando os mesmos cálculos para outras quantidades de cidades, tem-se o


Quadro 1 a seguir.

Quadro 1
Tempo de execução da solução simples para o TSP.

n Rotas/segundo (n-1)! Tempo total


5 250.000.000.000 24 0,000000000096 s
10 110.000.000.000 362.880 0,00000329891 s
15 71.000.000.000 87.178.291.200 1,22786325633 s
20 53.000.000.000 1,216451 * 10 17
26,56 dias
25 42.000.000.000 6,204484 * 1023 468.435,470 anos
100 10.000.000.000 9,332621 * 10155 2,9593 * 10138 anos
399 2.500.000.000 4,0121881 * 10863 5.089026 * 10846 anos

Fonte: Elaborado pelo autor.

Levando em consideração que se estima a idade do universo em 14 bilhões de


anos, ou seja, 1,4 * 1010 anos, o tempo de cálculo de todas as rotas para um esta-
do do tamanho do Paraná, com 399 cidades, usando um computador que efetua
1 trilhão de adições por segundo, é completamente inviável.

Assim, a solução de encontrar todas as rotas e verificar a melhor não pode ser
aplicada. Quando mapeado para grafos, esse problema é enunciado como buscar
um circuito hamiltoniano ótimo em um grafo valorado. Assim, resolver o problema
de rotas é resolver um problema em grafos.

Artigo

http://www.pucrs.br/ciencias/viali/graduacao/po_2/literatura/grafos/artigos/Famat_artigo_04.pdf

No artigo Algumas aplicações da teoria dos grafos, dos autores Pereira e Câmara, publicado
em Famat em Revista, os conceitos básicos dessa teoria são revisitados e algumas aplicações
são apresentadas, como é o caso do problema do caixeiro-viajante, enunciado sobre algumas
cidades do estado de Minas Gerais. Também, são apresentados alguns algoritmos para sua
solução.

Acesso em: 14 abr. 2020.

30 Teoria dos Grafos


Outra problematização que pode ser mapeada para grafos é a robustez da ma-
lha elétrica para distribuição de energia. A malha elétrica é formada por torres e
linhas de transmissão. Para saber quantas linhas no mínimo precisam falhar para
que haja um apagão, isto é, para que parte do sistema fique desconectado, pode-se
mapear as torres como vértices e as linhas de transmissão como arestas. Assim, o
problema do apagão se transforma em descobrir o corte mínimo em um grafo, ou
seja, o conjunto de arestas que, quando retiradas do grafo, interrompe o fluxo de
um vértice a outro (Figura 39).

Figura 39
Malha elétrica

t2
t7
t3
t1

t5
t8

t4
t6 t9
Fonte: Elaborada pelo autor.

A Figura 39 apresenta um exemplo de torres e linhas de transmis-


Figura 40
são. Partindo de t1 até t9, por exemplo, quantas arestas no mínimo
Professores X disciplinas
precisam ser retiradas para que t9 sofra um apagão?
P1 d1
O problema de alocação de professores e disciplinas também
pode ser representado como um grafo. Sejam n professores e m
disciplinas, assumindo que cada professor pode ministrar algumas
disciplinas, mas que só poderá ofertar uma disciplina no semestre, é P2 d2
possível que todas as disciplinas sejam ofertadas simultaneamente?
Qual o maior número de disciplinas que pode ser ofertado?

A Figura 40 mostra a representação do problema de alocação de


professores e disciplinas. Pode-se observar que esse é um grafo bi- P3 d3
partido e que, portanto, definições e algoritmos referentes a esse
tipo de grafo são úteis para a solução do problema.

Outro problema interessante é o famoso lema do aperto de


P4 d4
mão, que é consequência do teorema do grau dos grafos, apresen-
tado na Seção 1.4. Informalmente, em qualquer festa contendo um
grupo de pessoas, sendo que algumas se cumprimentam (apertam
as mãos), o número de pessoas que apertam um número ímpar de
mãos sempre é par. P5 d5

Seja o problema mapeado como um grafo, em que os vértices são Professores Disciplinas
pessoas e uma aresta indica que uma pessoa aperta a mão de outra, Fonte: Elaborada pelo autor.

Introdução ao estudo dos grafos 31


a quantidade de vezes que uma pessoa aperta a mão de outra é o grau do vértice.
Suponha que esse grafo tenha um número ímpar de vértices de grau ímpar. Assim,
a soma desses graus é ímpar. Sabendo-se que a soma dos graus dos vértices de
grau par sempre é par, então, a soma dos graus de todos os vértices, nesse caso,
é ímpar. Isso contradiz o teorema que indica que a soma dos graus dos vértices de
um grafo é o dobro do número de arestas, logo, um número par. Portanto, o núme-
ro de vértices de grau ímpar deve obrigatoriamente ser par.

CONSIDERAÇÕES FINAIS
Este capítulo apresentou a história dos grafos, mostrando a sua origem, que é mais
antiga do que os computadores conhecidos hoje em dia. Mesmo sendo uma teoria
ancestral, os grafos até hoje são usados para mapear problemas do mundo a serem
resolvidos com algoritmos computacionais.
Também foi possível observar os vários conceitos complexos necessários para o
estudo dos grafos. Convém ressaltar que essa teoria, por se tratar de um ramo da
matemática, com aplicações em várias áreas, é defina por uma notação formal a ser
absorvida. Esse formalismo é necessário para que o desenvolvimento de conceitos
avançados e algoritmos possa ser feito de maneira correta.

ATIVIDADES
1. Observe o problema das pontes de Königsberg, conforme a figura a seguir.

Sergey Merkulov/Shutterstock

Esse problema é mapeado pelo seguinte grafo:

v1

v2 v4

v3

32 Teoria dos Grafos


Sabendo que não é possível partir de qualquer ponto e passar por todas as pontes
somente uma vez, retornando ao ponto de partida, uma vez que o grafo resultante
não é euleriano, construa mais algumas pontes de modo que o grafo torne-se euleria-
no e seja possível passar por cada aresta somente uma vez, partindo e chegando no
mesmo ponto.

2. Construa a representação geométrica do grafo G = (V, A), tal que:


V = {1, 2, 3, 4, 5, 6}

A = {(1,3), (1,4), (1,5), (2,3), (2,4), (2,5), (3,5), (4,5)}

3. Construa a matriz de adjacências do grafo da Questão 2.

4. Verifique se o seguinte grafo é bipartido. Dê os dois conjuntos de vértices


característicos.
2 3

1 4

6 5

5. Desenhe um possível grafo que contenha vértices de grau 5, 2, 2, 2, 2, 1. Quantas


arestas esse grafo possui?

REFERÊNCIAS
BOAVENTURA NETTO, P. O.; JURKIEWICZ, S. Grafos: introdução e prática. São Paulo: Blucher, 2009.
EULER, L. Solutio problematis ad geometriam situs pertinentis. Commentarii Academiae Scientiarum
Petropolitanae, v. 8, p. 128-140, 1736.
RODRIGUES, E. J. Um Algoritmo para o Problema do Isomorfismo de Grafos. São Paulo, 2014. Dissertação
(Mestrado em Ciência da Computação) – Universidade Federal do ABC. Disponível em: http://biblioteca.
ufabc.edu.br/index.php?codigo_sophia=75394 Acesso em: 14 abr. 2020.
SZWARCFITER, J. L. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.

Introdução ao estudo dos grafos 33


2
Conectividade
A conectividade em grafos é um aspecto muito importante no estudo da
teoria de grafos, pois muitos problemas podem ser mapeados e analisados
através de uma sequência de arestas. Para isso, deve-se conceituar grafos co-
nexos e desconexos, bem quanto suas componentes conexas. Para caminhar
em um grafo, tanto orientado como não orientado, faz-se necessária a aplicação
de conceitos, como caminhos e circuitos. E destes conceitos surgem os grafos
eulerianos e hamiltonianos. Quando se trabalha com componentes conexas de
grafos também se faz necessário o estudo de subgrafos e suas denominações.
Assim, neste capítulo será apresentada, na Seção 2.1, a teoria sobre grafos
conexos e desconexos, bem como a definição de componentes conexas e suas
implicações. Na Seção 2.2 são apresentadas noções sobre caminhos e circuitos,
bem como a formalização de grafos conexos e componentes conexas. Também
são apresentados formalmente os conceitos de grafos eulerianos e hamiltonia-
nos. Na Seção 2.3 são mostrados os subgrafos e seus usos. Os conceitos de vér-
tice de corte, arestas de corte e suas aplicações são apresentados na Seção 2.4.

2.1 Grafos conexos e componentes


Vídeo Um grafo conexo é aquele em que é possível estabelecer um caminho desde um
vértice a outro, passando pelas arestas; caso um grafo não atenda esta condição, é
chamado grafo desconexo (BOAVENTURA NETTO). Por exemplo, na Figura 1, o vértice
v3 faz parte do grafo, mas não tem aresta com nenhum outro vértice e, na Figura 2, os
vértices v3 e v5 possuem aresta entre si, mas não possuem aresta com a outra parte
do grafo, caracterizando, portanto, dois grafos desconexos.

Figura 1 Figura 2
Grafo desconexo com aresta desconexa Grafo desconexo com duas componentes conexas

v2 v2
v3 v3

v1 v5 v1 v5
v4 v4

Fonte: Elaborada pelo autor. Fonte: Elaborada pelo autor.

34 Teoria dos Grafos


Denominam-se componentes conexas do grafo G todos os subgrafos maximais
conexos de G, isto é, subgrafos conexos que não estão estritamente contidos em
outros subgrafos conexos. Por exemplo, o grafo G (Figura 3) possui três compo-
nentes conexas, G’, G’’, G’’’, a saber:

G’ = (V’, A’)
• V’ = {v1, v2, v3}
• A’ = {(v1, v2), (v2, v3), (v3, v4)}
G’’ = (V’’, A’’)
• V’’ = {v4, v5, v6, v7}
• A’’ = {(v4, v5), (v5, v6), (v6, v4), (v7, v6)}
G’’’ = (V’’’, A’’’)
• V’’’ = {v8}
• A’’’ = {}
Figura 3 v2
Grafo G com três componen-
tes conexas
v3

v1 v8
v5

v4 v6

v7
Fonte: Elaborada pelo autor.

Para ser uma componente conexa, o subgrafo deve ser maximal, ou seja, não
deve estar contido em outro subgrafo. No exemplo da Figura 3, o subgrafo formado
Saiba mais
pelos vértices v5 e v6, juntamente com a aresta (v5, v6), não é uma componente cone-
xa, pois está contido no subgrafo G’’. Um subconjunto X’ de um con-
junto X é dito maximal em relação
Um grafo é chamado totalmente desconexo se todos os seus vértices pos- a alguma propriedade, se X não
for subconjunto de nenhum outro
suem grau zero, como na Figura 4.
subconjunto de X que possua
Figura 4 aquela propriedade. Cuidado para
Grafo Totalmente Desconexo não confundir maximal com
máximo. Maximal diz respeito
v1 v2 v3 à pertinência e máximo, à cardi-
nalidade (número de elementos)
Fonte: Elaborada pelo autor. (GOLDBARG; GOLDBARG, 2012).
No caso aqui, uma componente
Os conceitos de conectividade, como componentes conexas, são importantes conexa é um subgrafo maximal,
para o entendimento de assuntos como caminhos e circuitos, cortes, árvores e ou- G’, isto é, um subgrafo para o qual
não existe outro subgrafo H’, tal
tros. Em muitos problemas mapeados para grafos, a conectividade é discutida e que G’ está contido em H’.
calculada, o que torna esses conceitos imprescindíveis.

Conectividade 35
2.2 Caminhos e circuitos
Vídeo O conceito de caminho é muito usado em vários problemas mapeados para grafos.
Um desses problemas é descobrir se existe um caminho entre um vértice e outro; se
existe um conjunto de arestas que, quando visitadas em sequência, levam do ponto
origem ao ponto destino.

Segundo Szwarcfiter (2018), um caminho ou passeio em um grafo G = (V, A) é


uma sequência de vértices v1,...,vk, tal que vi ∈ V, (vi, vi+1) ∈ A, 1 ≤ i < k. Esse caminho
é formado pelas seguintes arestas: (v1, v2), (v2, v3), (v3, v4),...(vk-1, vk).

Figura 5 v1 v2
Grafo G

v5
v3

v4

v6
Fonte: Elaborada pelo autor.

Por exemplo, o grafo G da Figura 5 possui, pelo menos, um caminho entre v4 e


v6, formado pelas arestas (v4, v2), (v2, v5), (v5, v6). Perceba que, a partir da segunda,
cada aresta é adjacente à anterior.

Um trajeto é definido como um caminho sem arestas repetidas. Um caminho


simples é um caminho que não possui vértices repetidos. O caminho entre v4 e v6
formado pelas arestas (v4, v2), (v2, v5), (v5, v6) sobre o grafo G (Figura 5) é um trajeto,
pois não repete arestas. Também é um caminho simples, pois não repete vértices.
Já o caminho formado pelas arestas (v4, v1), (v1, v2), (v2, v4), (v4, v6) não é um caminho
simples, pois repete o vértice v4. E o caminho formado pelas arestas (v4, v2), (v2, v1),
(v1, v4), (v4, v2), (v2, v5), (v5, v6) não é um trajeto, pois repete a aresta (v4, v2) (ou (v2, v4),
já que é um grafo não dirigido).

O primeiro vértice v1 que faz parte do caminho é chamado origem, e seu último
vértice vk é conhecido como término. Assim, diz-se que esse caminho vai de v1 a vk.
No exemplo apresentado anteriormente, o vértice v4 é a origem do caminho e v6 o
seu término.

Com a definição de caminho, é possível formular que um grafo é conexo quan-


do existe caminho entre cada par de vértices e, caso contrário, é desconexo. O ta-
manho de um caminho é dado pelo número de arestas que fazem parte dele. Se
o caminho é formado por k vértices, então possui pelo menos k – 1 arestas e o valor
k – 1 é o tamanho do caminho. Se o caminho é simples (sem vértices repetidos) en-
tão seu comprimento é exatamente k – 1. Assim, a distância entre dois vértices
pode ser medida pelo tamanho do menor caminho entre eles (FEOFILOFF, 2020).
No exemplo aplicado ao grafo G (Figura 5), o caminho simples (v4, v2), (v2, v5), (v5, v6)
é formado por quatro vértices e tem tamanho três.

36 Teoria dos Grafos


É definido como ciclo um caminho v1,..., vk, vk+1, de tal forma que v1 = vk+1 e k ≥
3. Isto é, um ciclo é um caminho que começa e termina no mesmo vértice, desde
que contenha mais de dois vértices envolvidos. Um ciclo simples ou elementar é
um ciclo v1,..., vk, vk+1 em que o caminho v1,..., vk é simples, não possui vértices re-
petidos, exceto o primeiro e último, o que determina ser um ciclo. Se não houver
ambiguidade, os termos caminho e ciclo são usados denotando caminho simples
e ciclo simples, respectivamente. Se o ciclo possuir tamanho três, então é chama-
do triângulo.

Para o grafo G, da Figura 5, o caminho simples (v4, v2), (v2, v5), (v5, v6), (v6, v4) é um
ciclo, pois seu início e término são pelo mesmo vértice (v4), e é simples, pois não
repete vértices. Nesse mesmo grafo, o ciclo (v4, v2), (v2, v1), (v1, v4) é um triângulo,
pois possui tamanho três.

Se um ciclo puder ser obtido de outro pela permutação circular dos seus vérti-
ces, então esses ciclos são considerados idênticos. O grafo G (Figura 5) representa
dois ciclos: (v4, v2), (v2, v1), (v1, v4) e (v2, v1), (v1, v4), (v4, v2). Perceba que ambos os
ciclos possuem as mesmas arestas e só mudam em relação a sua origem e tér-
mino. Assim, um é permutação circular do outro, fazendo com que sejam ciclos
idênticos.

Todos os conceitos apresentados também são aplicados a digrafos (grafos


orientados). Nesse caso, um caminho ou passeio em um digrafo D = (V, A) é uma
sequência de vértices v1,..., vk tal que (vi, vi+1) ∈ A, 1 ≤ i < k. Esse caminho é formado
pelas seguintes arestas orientadas: (v1, v2), (v2, v3), (v3, v4),…(vk– 1, vk). Convém ressal-
tar que, por ser um grafo orientado, a aresta (vi, vi+1) indica que o vértice vi+1 é adja-
cente ao vértice vi, mas a recíproca não é necessariamente verdadeira.

Por exemplo, na Figura 6, o digrafo D tem um caminho formado pelas seguin-


tes arestas: (v5, v3), (v3, v1), (v1, v2), (v2, v5). Já a seguinte sequência de arestas: (v3,
v1), (v1, v4), (v4, v5), (v5, v3) não é um caminho, pois a aresta (v1, v4) não existe, a
aresta existente é (v4, v1), a ordem importa.

Figura 6
Digrafo D com caminho
v2

v1 v3

v4

v5
Fonte: Elaborada pelo autor.

Conectividade 37
Figura 7 Seja o digrafo D = (V, A), se para qualquer par de vértices vi, vj houver caminho
Digrafo fortemente conexo orientado partindo de vi a vj, e se houver caminho orientado partindo de vj a vi, o
v2 digrafo é chamado fortemente conexo. Informalmente, qualquer vértice é acessível a
partir de qualquer outro e essa propriedade pode ser observada no grafo da Figura
7. Perceba que para qualquer par de vértices vi e vj, há um caminho partindo de vi e
v1
chegando em vj, e um caminho partindo de vj e chegando em vi.

Se para o digrafo D = (V, A) e qualquer par de vértices vi, vj, houver caminho
v3
orientado partindo de vi a vj, mas não houver caminho orientado partindo de vj a vi,
Fonte: Elaborada pelo autor.
então o digrafo é chamado unilateralmente conexo. Se o digrafo não for fortemente
conexo, mas tiver seu grafo subjacente – resultante da retirada das orientações das
arestas – conexo, então é dito fracamente conexo. O digrafo da Figura 6 não é forte-
mente conexo, mas seu grafo subjacente (Figura 8) é conexo. Portanto, o digrafo da
Figura 6 é fracamente conexo.

Um caminho em um grafo G que contém todos os vértices de G


Figura 8
Grafo Subjacente de D somente uma vez é chamado de caminho hamiltoniano. Seja um ci-
v2 clo v1,..., vk, vk+1 em um grafo G, se o caminho v1,..., vk for hamiltonia-
no, então o ciclo v1,..., vk, vk+1 é denominado ciclo hamiltoniano. Um
grafo que contém um ciclo hamiltoniano é um grafo hamiltoniano.
v1 v3
Se um grafo contiver um caminho hamiltoniano, mas não um ciclo
hamiltoniano, é um grafo semi-hamiltoniano. Na prática, um grafo
semi-hamiltoniano se torna hamiltoniano ao acrescentar uma ares-
ta entre a origem e o término do caminho hamiltoniano.

v4 As definições de caminho, ciclo e grafo hamiltoniano também se


aplicam a digrafos (grafos orientados). Um caminho orientado em
um digrafo é um caminho hamiltoniano, se contiver todos os vérti-
v5
ces do digrafo sem repetição de vértices. Agora, se for um caminho
Fonte: Elaborada pelo autor.
hamiltoniano e iniciar e terminar no mesmo vértice, um ciclo orien-
tado em um digrafo é um ciclo hamiltoniano. Já um digrafo é hamiltoniano se con-
tiver um ciclo orientado hamiltoniano. Se um digrafo contiver um caminho orientado
hamiltoniano, o digrafo é semi-hamiltoniano (NICOLETTI; HRUSCHKA JUNIOR,
2018).

Como resultado dessa definição, é possível perceber que um grafo completo Kn,
sendo n ≥ 3, é sempre hamiltoniano. Isso ocorre porque em um grafo completo to-
dos os n vértices possuem arestas incidentes a todos os demais n – 1
Figura 9
Grafo hamiltoniano vértices. Assim, para todo vértice vi, 1 ≤ i ≤ n, existe o seguinte cami-
nho C = {(v1, v2), (v2, v3), (v3, v4)..., (vn–1, vn)}, que passa por todos os vér-
v2
tices {v1,..., vn} somente uma vez. Como todos vértices são adjacentes
aos demais, o vértice vn também é adjacente a v1, assim o caminho
C adicionando-se a aresta (vn, v1) é um ciclo que passa por todos os
v1 v4 v3 vértices, portanto, é um ciclo hamiltoniano e o grafo é hamiltoniano.

Ao se analisar o grafo da Figura 9, percebe-se que o caminho


(v2, v3), (v3, v5), (v5, v1), (v1, v4) passa por todos os vértices, exata-
mente uma vez, portanto, é um caminho hamiltoniano. No mes-
v5
mo grafo, o caminho (v2, v3), (v3, v5), (v5, v1), (v1, v4), (v4, v2) é um ciclo
Fonte: Elaborada pelo autor.

38 Teoria dos Grafos


(começa e termina em v2), caracterizando-o, portanto, como um ciclo hamiltonia-
no e, por conta disso, o grafo é hamiltoniano.

Se um caminho em um grafo G contém todas as arestas do grafo somente uma


vez, é chamado de caminho euleriano. Se esse caminho for um ciclo, então é co-
nhecido como ciclo euleriano. Um grafo que contém um ciclo euleriano é um grafo
euleriano. Um grafo é semieuleriano se possuir um caminho euleriano, mas não
um ciclo euleriano. Na prática, um grafo semieuleriano se torna euleriano bastando
inserir uma aresta entre a origem e o término do caminho euleriano (NICOLETTI;
HRUSCHKA JUNIOR, 2018).

Conforme já apresentado, um grafo não orientado é um grafo euleriano se, e


somente se, todos os seus vértices possuem grau (número de arestas incidentes)
par. Um grafo é semieuleriano se possuir dois vértices com grau ímpar e todos os
demais com grau par.
Figura 10
Observando o grafo da Figura 10, percebe-se que há um caminho passando pelos Grafo euleriano
seguintes vértices na sequência (v1, v2, v3, v4, v5, v6, v1, v4, v2, v5, v1) que passa por todas v3
as arestas, somente uma vez, sendo, portanto, um caminho euleriano. Como esse
caminho começa em v1 e termina em v1, é um ciclo euleriano e, consequentemente, a2 a3
o grafo é euleriano. v2 a8 v4
Os conceitos também se aplicam a digrafos, isto é, se um caminho orientado em
a10
um digrafo D contém todas as arestas do grafo somente uma vez, então é um ca- a1 a4
minho euleriano. Se esse caminho for um ciclo orientado, então é conhecido como a9
ciclo euleriano. Um digrafo que contém um ciclo euleriano é chamado de digrafo
v1 a7 v5
euleriano.

Para verificar se um digrafo é euleriano há uma condição necessária e suficien- a6 a5


te. Um digrafo D = (V, A) é euleriano se, e somente se, for unilateralmente conexo e
v6
se para todo vértice vi ∈ V, o grau de entrada de vi – denotado como grau+(vi) ou o
número de vértices que chegam em vi– for igual ao grau de saída de vi – denotado Fonte: Elaborada pelo autor.

como grau– (vi) ou o número de vértices que saem de vi.

Por exemplo, o digrafo da Figura 11 é euleriano, pois é unilateralmente conexo Figura 11


– para cada par de vértices há um caminho orientado entre eles, em algum sentido Digrafo Euleriano

– e para cada vértice, o número de vértices que entram (grau de entrada) é igual ao v1 v5
número de vértices que saem (grau de saída).

No digrafo da Figura 11, um ciclo euleriano é: (v6, v4), (v4, v2), (v2,, v3), (v3, v4), (v4, v5),
(v5, v3), (v3, v1), (v1, v5), (v5, v2), (v2, v6).

Um teorema similar existe para verificar se o digrafo possui um caminho eule-


riano (não um ciclo). Um digrafo D = (V, A) possui um circuito euleriano se, e somen- v2 v3
te se, for unilateralmente conexo e se possuir as seguintes condições:
1. Dois de seus vértices vi e vj são tais que:
• o grau de entrada de vi é igual ao seu grau de saída mais um, isto é, grau+(vi)
= 1 + grau–(vi);
• o grau de saída de vj é igual ao seu grau de entrada mais um, isto é, grau– v6 v4
(vj) = 1 + grau+(vj). Fonte: Elaborada pelo autor.
2. Para todos os demais vértices, seus graus de entrada e saída são iguais, isto
é, v ∈ V, grau–(v) = grau+(v).
A

Conectividade 39
Com essas condições, o caminho euleriano se inicia em vj (o vértice com mais
arestas de saída do que de entradas) e termina em vi (o vértice com mais arestas de
entrada do que de saídas).

Como exemplo, pode-se analisar o digrafo da Figura 12, que é unilateralmente


conexo. Os graus dos seus vértices são:
Figura 12 • vértice v1: grau+(v1) = 1 e grau–(v1) = 2
Digrafo com caminho euleriano
• vértice v2: grau+(v2) = 3 e grau–(v1) = 2
v1 v5
• vértice v3: grau+(v3) = 2 e grau–(v1) = 2
• vértice v4: grau+(v4) = 2 e grau–(v1) = 2
• vértice v5: grau+(v5) = 2 e grau–(v1) = 2
• vértice v6: grau+(v6) = 1 e grau–(v1) = 1

v2 v3 Claramente percebe-se que o grau de entrada de v2 é o seu grau de saída


mais um. O grau de saída de v1 é o seu grau de entrada mais um. Todos os
demais vértices possuem grau de entrada igual ao grau de saída. Assim, esse
digrafo possui um caminho euleriano que inicia exatamente em v1 e termina
em v2. O caminho euleriano nesse dígrafo é: (v1, v5), (v5, v3), (v3, v4), (v4, v5), (v5,
v2), (v2, v6), (v6, v4), (v4, v2), (v2, v3), (v3, v1), (v1, v2).
v6 v4
Fonte: Elaborada pelo autor.

2.3 Subgrafos
Vídeo De maneira coloquial, um subgrafo de um grafo G é uma parte dele, ou seja, é
um grafo contendo uma parte dos vértices e das arestas de G. Quais e quantos
vértices e arestas do grafo G definem o tipo de subgrafo se torna. Define-se um
grafo H como um subgrafo de G, como sendo um grafo em que todo vértice de H
também é vértice de G e toda aresta de H também é aresta de G (FEOFILOFF; KOHA-
YAKAWA; WAKABAYASHI, 2011). Por exemplo, o grafo G, na Figura 13.

Ao analisar o grafo da Figura 14, percebe-se que todo vértice de H


Figura 13 v2
Grafo G está em G e que toda aresta de H também está em G. Portanto, o
grafo H é um subgrafo de G.
v3 Segundo Feofiloff, Kohayakawa e Wakabayashi (2011), um grafo H
é um subgrafo próprio de G, se H for subgrafo e diferente de G. Um
v4 grafo H é um subgrafo gerador de G, se tiver todos os vértices de G.
v1
O grafo H da Figura 14 não é um sub-
Figura 14
grafo gerador de G, pois tem vértices Subgrafo de G
v5 em G que não estão em H. Do mes-
v2
Fonte: Elaborada pelo autor. mo modo, como H é diferente de G,
diz-se que H é um subgrafo próprio de G.

O subgrafo H é um subgrafo induzido de G se v3


todo arco de G, que tem ambas as pontas em H,
também for um arco de H, isto é, se H possuir to- v4

v1
Fonte: Elaborada pelo autor.

40 Teoria dos Grafos


das as arestas que aparecem em G sobre os mesmos vértices. A
Figura 15
Figura 15 apresenta um grafo induzido de G. Todas as arestas de Subgrafo induzido de G v2
G que possuem as duas pontas em arestas do subgrafo aparecem
no grafo induzido.

Um grafo H é um grafo parcial de G, se H for um subgrafo de


G e se possuir o mesmo conjunto de vértices que G. Na Figura
16 percebe-se que o grafo possui todos os vértices do grafo G da v4
Figura 13, portanto, esse é um grafo parcial de G. v1
Pode-se definir também G’ como um supergrafo de G, se G for
subgrafo de G’.
Fonte: Elaborada pelo autor. v5
Os conceitos de subgrafos também são aplicáveis a digrafos,
levando-se em consideração que as arestas são dirigidas. Seja G =
Figura 16
(V, A) um grafo. Dois subgrafos de G, G’ = (V’, A’) e G’’ = (V’’, A’’) são Grafo parcial de G
chamados aresta-disjuntos se não possuírem arestas em comum, v2
ou seja, A’∩ A’’ = ∅. Da mesma maneira, são chamados de vérti-
ces-disjuntos se não possuírem vértices em comum, ou seja, V’ ∩
V’’ = Ø.
v3
Por exemplo, dado o grafo G da Figura 13, a Figura 17 apresen-
ta dois subgrafos aresta-disjuntos de G e a Figura 18 apresenta v4
dois subgrafos vértice-disjuntos de G. v1

v5
Fonte: Elaborada pelo autor.

Figura 17
Subgrafos de G aresta-disjuntos

v2 v2

v3

v3
v4
v1 v4
v1

v5 v5
Fonte: Elaborada pelo autor.

Figura 18
Subgrafos de G vértice-disjuntos
v2
v4
v3

v5 v1
Fonte: Elaborada pelo autor.

Conectividade 41
2.4 Cortes
Vídeo Seja G = (V, A) um grafo conexo. Denomina-se vértices de corte ou corte de vérti-
ces de G o subconjunto minimal de vértices V’ ⊂ V, cuja remoção de G torna o grafo
desconexo ou trivial (apenas um vértice sem qualquer aresta). O grafo G – V’ é des-
conexo ou trivial. Qualquer subconjunto próprio de V’, a saber, V’’ ⊂ V’, se retirado de
Saiba mais G, isto é G – V’’, torna o grafo conexo e não trivial (SZWARCFITER, 2018).

Um subconjunto X’ de um conjun- Um corte de arestas pode ser definido da seguinte maneira: seja G = (V, A) um
to X é dito minimal, em relação a grafo conexo, um corte de arestas é um subconjunto A’ ⊂ A, cuja remoção de G tor-
alguma propriedade, se X não for
superconjunto de nenhum outro
na o grafo desconexo, ou seja, G – A’ é um grafo desconexo. Assim, para qualquer
subconjunto de X que possua subconjunto próprio de A’, a saber, A’’ ⊂ A’, o grafo G – A’’ é conexo.
aquela propriedade. Cuidado
para não confundir minimal com O termo conectividade de vértices (cv de G) denota a cardinalidade do menor
mínimo. Minimal diz respeito à corte de vértices de G. Já conectividade de arestas (cA de G) denota a cardinalidade
pertinência e mínimo à cardina-
do menor corte de arestas de G. Assim, cV é o menor número de vértices que,
lidade (número de elementos)
(GOLDBARG; GOLDBARG, 2012). quando removidos de G, torna-o desconexo ou trivial. Se G é um grafo descone-
xo, então cV = cA = 0.
Importante
Considerando o grafo G mostrado na Figura 19.
É conveniente observar que um
Figura 19
grafo completo Kn, n > 1, não
Grafo G v2 v5
possui subconjunto próprio de
vértices V’⊂ V cuja remoção de Kn
o desconecte, embora a remoção
de n – 1 vértices torne o grafo
trivial. v1 v4 v6 v8

v3 v7
Fonte: Elaborada pelo autor.

Observe que um corte de vértices de G pode ser c1 = {v4}, pois o grafo G’ (Figura
20) com os vértices V’ = V – {v4} é desconexo. Perceba também que o conjunto c1 =
{v4} é minimal, pois não há qualquer subconjunto de c1 que, quando retirados os
vértices em G, torne o grafo desconexo.

Figura 20 v2 v5
Grafo G’

v1 v6 v8

v3 v7

Fonte: Elaborada pelo autor.

42 Teoria dos Grafos


Já, para o mesmo grafo G, um corte de arestas pode ser c2 = {(v2, v4), (v3, v4)}, pois
retirando essas arestas, é obtido o grafo G’’ (Figura 21), que é desconexo. Perceba
que o conjunto c2 = {(v2, v4), (v3, v4)}, é minimal, pois não há qualquer subconjunto de
c2 que, quando retiradas as arestas em G, torne o grafo desconexo.

Figura 21
Grafo G’’

v2 v5

v1 v4 v6 v8

v3 v7

Fonte: Elaborada pelo autor.


Atenção
Para o conjunto c3 = {(v2, v4), (v3, v4), (v4, v6)}, quando essas arestas são retiradas
de G, é gerado o grafo G’’’ (Figura 22), que é desconexo. Mas c3 não é um corte de Um subconjunto X’ de um
conjunto X é dito próprio se X’
arestas, pois não é um conjunto minimal, isto é, existe um subconjunto próprio é subconjunto de X, mas não é
de c3, que no caso é o c2, que também desconecta o grafo quando as arestas são igual a X. Em outras palavras,
retiradas de G. existe pelo menos um elemento
de X que não está no seu
Figura 22 subconjunto X’.
Grafo G’’’

v2 v5

v1 v4 v6 v8

v3 v7

Fonte: Elaborada pelo autor.

Para determinar a conectividade de vértices cv, obtém-se o corte de vértices de


menor cardinalidade (número de elementos), ou seja, o menor número de vértices
que, quando removidos, desconecta o grafo. Para o grafo G da Figura 19, os menores
cortes de vértices são os conjuntos c1 = {v4} e c2 = {v6}, portanto, a conectividade de
vértices de G é cv = 1.

Para determinar a conectividade de arestas cA, obtém-se o corte de arestas de


menor cardinalidade (número de elementos); o menor número de arestas que,
quando removidas, desconecta o grafo. Para o grafo G da Figura 19, o menor
corte de arestas é o conjunto c3 = {(v6, v8)}, portanto, a conectividade de arestas
de G é cA = 1.

Conectividade 43
Segundo Szwarcfiter (2018), um grafo G é k-conexo em vértices se a sua conec-
tividade de vértices for cv ≥ k. Da mesma maneira, um grafo G é k-conexo em ares-
tas quando a sua conectividade de arestas for cA ≥ k. O valor k é importante, pois
se um grafo é k-conexo em vértices (arestas), não existe corte de vértices (arestas)
menor que k. O grafo G da Figura 19 é 1-conexo em vértices e 1-conexo em arestas.
Quando um grafo é 2-conexo também é chamado biconexo.

Para um grafo G = (V, A) e um corte de arestas de G, A’ ⊆ A, sempre é possível


encontrar um corte de vértices V’ de tamanho |V’| ≤ |A’|. Para isso, escolhe-se para
fazer parte de V’ um subconjunto de vértices tal que, para toda aresta a ∈ A’, A inci-
de neste vértice. Por exemplo, seja o grafo G da Figura 23.

Figura 23
Grafo G

v2 v3 v5

v1 v4 v6

Fonte: Elaborada pelo autor.

Figura 24 Um corte de arestas é o conjunto c1 = {(v4, v6), (v3, v6), (v5, v6)}. A
Grafo G’
eliminação dessas arestas gera o grafo G’ da Figura 24.
v2 v3 v5
Assim, consegue-se obter um corte de vértices a partir de c1 eli-
minando um subconjunto dos vértices cujas arestas em c1 incidem.
Os vértices em c1 são v4, v3, v5, v6. Observe que eliminando v4, v3
tem-se o grafo da Figura 25, desconexo, e que não há subconjunto
de c2 = {v4, v3} que desconecte o grafo, sendo esse, portanto, um
corte de vértices. Percebe-se também que o |c2| ≤ |c1|.

Posto isso, conclui-se que cv ≤ cA, a conectividade de vértices de


v1 v4 v6
um grafo qualquer é sempre menor ou igual à sua conectividade de
Fonte: Elaborada pelo autor. arestas. Dado um grafo G não completo, cujo vértice v possui grau
mínimo, é possível desconectar G removendo grau(v) arestas, que
Figura 25
Grafo com vértices retirados são as arestas que incidem em v. Por exemplo, uma vez que o grafo
G da Figura 23 é um vértice de grau mínimo, ele é v1, sendo grau
v2 v5
(v1) = 3. Assim, é possível desconectar o grafo G removendo todas
as arestas incidentes a v1; nesse caso, são três arestas, a saber: (v1,
v2), (v1, v3), (v1, v4).

Portanto, sendo v um vértice de grau mínimo, grau(v) ≥ cA ≥ cv. Se


o grafo G for um grafo completo (G = Kn), então todos seus vértices
possuem o mesmo grau n – 1 (pois estão conectados com todos os
demais vértices) e, portanto, grau(v) = cA = cv = n – 1.
v1 v6

Fonte: Elaborada pelo autor.

44 Teoria dos Grafos


Se um vértice de um grafo, ao ser removido, o desconecta, o vértice é chama-
do de articulação. Igualmente, se uma aresta do grafo, quando removida, desco-
necta o grafo, então essa aresta é chamada ponte. A Figura 26 mostra um grafo
com articulações e uma ponte.

Figura 26
Grafo com ponte e articulações
Ponte

v2 v5 v7

v1 v3 v4 v6 v8

Articulações
Fonte: Elaborada pelo autor.

Dessa maneira, um grafo é biconexo em vértices se, e somente se, não possuir
articulações. Isso acontece, pois, se o grafo possuir uma articulação, significa que
o vértice, se removido, desconecta o grafo, portanto ele seria 1-conexo. Analoga-
mente, um grafo é biconexo em arestas se, e somente se, não possuir pontes, o
raciocínio é o mesmo (SZWARCFITER, 2018).

Com o conceito de caminho, consegue-se dizer que em um grafo conexo G = (V, A),
|V| > 2, as seguintes afirmações (SZWARCFITER, 2018):
1. Um vértice v ∈ V é articulação de G se, e somente se, existirem vértices v1, v2 ≠
v, tais que em todo caminho entre v1 e v2 em G, v está presente.
2. Uma aresta (v1, v2) ∈ A é ponte se, e somente se, (v1, v2) for o único caminho
simples entre v1 e v2.

Tirando a prova
Importante
Observe, a seguir, as provas dessas afirmações.
Sempre que se deve provar uma
Afirmação 1: um vértice v ∈ V é articulação de G se, e somente se, existirem afirmação que contém se, e so-
mente se, a prova é formada por
vértices v1, v2 ≠ v, tais que em todo caminho entre v1 e v2, em G, v está presente. duas partes: a ida (→) e a volta
Prova de ida →: assumimos que v é uma articulação, portanto, retirar v de G, (←). Por exemplo, queremos
provar a afirmação: Chove se, e
pela definição de articulação, desconecta o grafo. Se o grafo G’ resultante da re- somente se, faz frio. A ida significa
moção de v é desconexo, então, é formado por, pelo menos, duas componentes provar que se chove, então faz frio.
Já a volta significa provar que se
conexas, dois vértices (v1 e v2) em componentes conexas diferentes. Então, como v
faz frio, então chove (GERSTING;
é articulação, qualquer caminho entre v1 e v2 passa por v. IÓRIO, 2012).
Prova de volta ← : assumimos dois vértices v1 e v2 de G, diferentes de v, tal que
todo caminho entre v1 e v2 passa por v. Assim, se todo caminho entre v1 e v2 passa
por v, significa que se o vértice v for removido do grafo G, então, v1 não é mais al-
cançável a partir de v2 (e vice-versa, assumindo G não dirigido), isto é, não há mais
caminho entre dois vértices do grafo, o que caracteriza um grafo desconexo. Um
vértice que quando removido desconecta o grafo, é a definição de articulação, por-
tanto, v é uma articulação G.

Conectividade 45
Afirmação 2: uma aresta (v1, v2) ∈ A é ponte se, e somente se, {v1, v2} for o único
caminho simples entre v1 e v2.

Prova de ida → : assumimos a aresta (v1, v2) ∈ A é ponte do grafo G e, portanto,


retirar essa aresta de G, pela definição de ponte, desconecta o grafo. Se o grafo G’
resultante da remoção de (v1, v2) é desconexo, então, v1 e v2 estão em componentes
conexas distintas. Assim, a aresta (v1, v2) é o único caminho simples entre v1 e v2.

Prova de volta ← : assumimos que a aresta a (v1, v2) ∈ A é o único caminho


simples entre v1 e v2. Como v1 e v2 são adjacentes (há uma aresta entre eles), ser o
único caminho simples significa que não se tem arestas repetidas entre v1 e v2, nem
outro caminho entre eles passando por outros vértices. Assim, remover a aresta
(v1, v2) de G faz com que v1 não seja mais alcançável a partir de v2 (e vice-versa, as-
sumindo um grafo não dirigido), portanto, o grafo se torna desconexo. Uma aresta
que quando removida do grafo o desconecta é a definição de ponte, portanto, (v1,
v2), é ponte de G.

Para um grafo G, definem-se componentes biconexas aos subgrafos maximais


de G que sejam biconexos em vértices ou que sejam isomorfos a K2. As componen-
tes biconexas são também chamadas de blocos do grafo. Se um grafo G for bicone-
xo, ele só possui um bloco, que é o próprio G. A Figura 27 mostra todos os blocos
do grafo da Figura 26 (FEOFILOFF, 2020).

Figura 27
Bloco do grafo

v2 v5 v7

v1 v3 v4 v6 v6 v8

v3 v4

Fonte: Elaborada pelo autor.

Por essa definição, percebe-se que cada aresta de um grafo pertence a exatamente
um bloco do grafo. Também percebe-se que um vértice é articulação do grafo se, e
somente se, pertencer a mais de um bloco do grafo.
Na Figura 27 é possível perceber que cada aresta faz parte de somente um bloco
do grafo e que os vértices v3, v4 e v6, que são articulações, são os únicos vértices que
aparecem em mais de um bloco.
A caracterização de corte de vértices e de arestas é importante para a aplica-
ção de grafos na modelagem de alguns problemas reais. Veja como exemplo uma
rede de computadores como a da Rede Nacional de Ensino e Pesquisa (RNP), or-
ganização responsável, entre outras coisas, pela manutenção da Rede Ipê – a rede
acadêmica brasileira que interliga universidades. A rede é formada por Pontos de
Presença (PoP) em cada uma das unidades da federação e esses pontos são conec-
tados por fibra ótica de alta velocidade (REDE..., 2020). Um dos problemas em que
grafos são aplicáveis, apesar de nesse caso ser uma modelagem simples, é para

46 Teoria dos Grafos


verificar se há algum ponto em que essa rede pode ficar desconectada se algum
link de internet deixar de funcionar.
Modelar essa rede como um grafo é simplesmente assumir que cada PoP é um vér-
tice do grafo e cada link de internet entre os PoPs é uma aresta.

Figura 28
Mapa de tráfego da Rede Ipê

Fonte: RNP, 2020b.

Esta rede é mapeada pelo grafo da Figura 29.

Figura 29
Rede Ipê mapeada por um grafo

RO MT GO DF MG CE RN

RR MA
AC MS TO AM PB1

PA
AP

RS PR BA SE AL PI

PE PB2
SC SP RJ ES

Fonte: Elaborada pelo autor com base em RNP, 2020b.

Conectividade 47
Encontrar um link de rede que deixa algum estado desconectado é o mesmo
que encontrar um corte de arestas no grafo que o torna desconexo. Esse grafo,
em especial, é 1-conexo, pois se for retirada a aresta (PA, AP), o grafo se torna
desconexo. Assim, se cair o link de internet entre os PoPs Pará e Amapá, o Amapá
ficará desconectado do resto da rede. Com esse resultado, os engenheiros podem
planejar expansões na rede, inclusive como um caminho alternativo entre PA e AP,
para que haja redundância na rede.

Na Figura 28 percebe-se que o link entre PE e CE está em preto que, segundo


a legenda, significa que não há tráfego entre esses dois pontos. Isso significa que
qualquer comunicação entre MT e MS deve passar por outro caminho. Entre os
possíveis caminhos estão: (MT, GO), (GO, DF), (DF, SP), (SP, PR), (PR, MS).

CONSIDERAÇÕES FINAIS
Este capítulo apresentou conceitos relativos à conectividade de grafos, como gra-
fos conexos e desconexos, as componentes conexas e suas caracterizações. Também
foram mostrados os conceitos de caminhos e ciclos, que são de grande importância
para a aplicação de grafos em problemas reais. Os conceitos de grafos hamiltonianos
e eulerianos foram definidos sobre caminhos e ciclos, bem como em digrafos (grafos
dirigidos ou orientados).
Ao final, foram expostas as definições de subgrafos, vértices de corte e arestas de
corte. Em especial, os conceitos de pontes e articulações, que também são de grande
importância no mapeamento de problemas reais para grafos. O problema de busca
de pontes em grafos foi aplicado à Rede Ipê, para descobrir fraquezas na rede, em
que a queda de um link de internet entre duas instituições pode deixar parte da rede
desconectada.

ATIVIDADES
1. Dado o grafo a seguir, dê suas componentes conexas.
v4

v1 v2

v5

v3 v6

48 Teoria dos Grafos


2. Dado o digrafo a seguir, encontre um caminho entre v3 e v4.
v1 v2

v5

v3 v6

v4

3. Dado o grafo a seguir, encontre um ciclo euleriano.


v5
v1

v2
v3

v4

4. Dado o grafo semi-hamiltoniano a seguir, explique o que precisa ser feito para que
se torne um grafo hamiltoniano?
v1 v3

v2

v4

5. Dado o grafo a seguir, dê o subgrafo induzido contendo os vértices v1, v2 e v5.


v5
v1

v2
v3

v4

Conectividade 49
6. Dado o grafo a seguir, apresente todas as suas componentes biconexas.
v5
v3

v1

v6
v2

v4

v7

v8
v8

REFERÊNCIAS
BOAVENTURA NETTO, P. O.; JURKIEWICZ, S. Grafos: introdução e prática. São Paulo: Blucher, 2009.
FEOFILOFF, P. Instituto de Matemática e Estatística – USP, 2020. Algoritmos para grafos via Sedgewick.
Disponível em: https://www.ime.usp.br/~pf/algoritmos_para_grafos/. Acesso em: 14 maio 2020.
FEOFILOFF, P.; KOHAYAKAWA, Y.; WAKABAYASHI, Y. Uma introdução sucinta à Teoria dos Grafos. São
Paulo: Instituto de Matemática e Estatística – USP, 2011. Disponível em: https://www.ime.usp.br/~pf/
teoriadosgrafos/. Acesso em: 14 maio 2020.
GERSTING, J. L.; IÓRIO, V. de M. Fundamentos matemáticos para a ciência da computação: um tratamento
moderno de matemática discreta. 5. ed. Rio de Janeiro: LTC, 2012.
NICOLETTI, M. C; HRUSCHKA JUNIOR, E. R. Fundamentos da teoria dos grafos para computação. 3. ed. São
Paulo: LTC, 2018.
RNP. Rede Nacional de ensino e pesquisa, 2020a. Página inicial. Disponível em: https://www.rnp.br.
Acesso em: 14 maio 2020.
RNP. Panorama de Tráfego da Rede Ipê. Rede Nacional de ensino e pesquisa, 2020b. Disponível em: https://
www.rnp.br/sistema-rnp/ferramentas/panorama-de-trafego. Acesso em: 15 de abr. 2020.
SZWARCFITER, J. L. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.

50 Teoria dos Grafos


3
Caminho mínimo e
árvores geradoras
Assumindo que problemas do mundo real podem ser mapeados
para grafos, a resolução, às vezes, exige procedimentos que variam des-
de uma busca simples até o encontro de outros subgrafos com algumas
características.
Nesse sentido serão apresentados na Seção 3.1 deste capítulo os al-
goritmos de busca em profundidade e largura dos grafos, indicando que
esses conseguem encontrar as árvores geradoras dos grafos. Se os grafos
possuem pesos, será explorado na Seção 3.2 o problema de encontrar
a árvore geradora mínima, por meio dos algoritmos de Prim e Kruskal.
Por fim, na Seção 3.3 será trabalhado o problema do caminho mínimo, isto
é, encontrar o menor caminho entre dois vértices, que pode ser resolvido
pelo algoritmo de Dijkstra.

3.1 Busca em grafos e árvore geradora


Vídeo Muitos problemas em grafos são resolvidos por procedimentos Saiba mais
com base em algoritmos de busca ou suas adaptações, desde encon- Um emparelhamento M, em um
trar um caminho entre dois vértices até achar o emparelhamento grafo não dirigido, é um conjunto de
arestas em que todo vértice do grafo
máximo de um grafo.
incide em, no máximo, um elemento
Os procedimentos de busca em grafos se resumem em caminhar de M (FEOFILOFF, 2020). Encontrar
o emparelhamento máximo de
de maneira sistemática pelo grafo, considerando algumas condições um grafo pode ser útil para a
para decidir se o problema foi resolvido. Em termos de busca, o ob- determinação de rotas de veículos, a
jetivo é visitar todos os vértices e todas as arestas, evitando repetir a designação de tarefas etc.

passagem nesses elementos. Essa questão é crucial na resolução de


problemas, pois garante que não haja retrabalho, mas também exi- 1
ge a necessidade de recursos adicionais para marcar quando uma Um algoritmo é uma
sequência finita de passos
aresta ou um vértice já foi visitado. Assim, um vértice é dito marcado usada para resolver algum
quando já foi visitado pelo procedimento de busca e, portanto, é dis- problema. Os algoritmos
são independentes de lin-
tinto dos vértices não marcados. guagens de programação e
1 podem ser codificados em
O Algoritmo 1 apresenta um algoritmo básico de busca em qualquer plataforma.
grafos, que tem como entrada um grafo conexo com todos os seus ZIVIANI, N. Projeto de Algoritmos
vértices desmarcados. No primeiro passo, escolhe-se um vértice Com Implementações em Pascal e C.
Pioneira Thomson Learning. São Paulo:
para ser o inicial, marcando-o. Já no segundo, elege-se um vértice 2a ed. 2004.

Caminho mínimo e árvores geradoras 51


marcado v1, que possua um vértice incidente v2, tal que a aresta (v1, v2) ∈ A e ain-
da não tenha sido selecionada. Em seguida, o vértice v2 é marcado, se ainda não
estiver. Esse processo termina quando todas as arestas de G forem selecionadas.

Sempre que a aresta (v1, v2) é selecionada com base no vértice marcado v1, ela
é dita explorada. Um vértice se denomina explorado quando todas as arestas in-
cidentes forem exploradas. Nesse processo, é possível que um vértice seja alcan-
çado várias vezes pelo procedimento de busca, então, este será chamado visitado.
O mesmo conceito se aplica a arestas, caso precisem ser alcançadas várias vezes
pelo procedimento.

Algoritmo 1
Busca em grafo
Dados: Grafo G = (V, A)
1 Desmarcar todos os vértices
2 Escolher o vértice inicial
3 Marcar o vértice inicial
4 ENQUANTO existir algum vértice v1 marcado e com aresta (v1, v2) não explorada FAÇA
5 Escolher o vértice v1
6 Explorar a aresta (v1, v2)
7 SE v2 não está marcado ENTÃO
8 Marcar v2
9 FIM SE
10 FIM ENQUANTO
Fonte: Adaptado de Szwarcfiter, 2018.

Percebe-se que no Algoritmo 1 há vários pontos de escolha que ficaram em


aberto, a saber:
• Qual vértice inicial escolher?
• Qual vértice marcado v1 escolher?
• Qual aresta incidente ao vértice marcado v1, (v1, v2), escolher?

A maneira com a qual essas escolhas são feitas determina o tipo de busca. O cri-
tério sobre qual vértice v1 marcado escolher indica se a busca é em profundidade
ou em largura. Por exemplo, se o vértice selecionado for o último analisado, então,
é uma busca em profundidade. Já se o vértice priorizar os vértices no mesmo nível
(distância da raiz) antes de escolher os vértices do nível superior, então, é uma
busca em largura.

A busca em profundidade (do inglês depth-first search – DPS) ocorre quando o


próximo vértice marcado a ser escolhido for o mais recentemente alcançado pelo
algoritmo de busca. Esse critério garante que a determinação do vértice seja única
e sem ambiguidade.

Basicamente, ela pode ser implementada de duas formas: recursivamente ou


pelo uso de uma pilha. O Algoritmo 2 mostra o pseudocódigo recursivo, em que
Adj(v) é o conjunto de todos os vértices adjacentes a v.

52 Teoria dos Grafos


Algoritmo 2
Busca em profundidade recursiva
Dados: Grafo conexo G = (V, A)
1 PROCEDIMENTO Busca (v, pai)
2 Marcar v
3 PARA w ∊ Adj(v) FAÇA
4 SE w não está marcado ENTÃO
5 Visitar aresta de árvore (v, w)
6 Busca (w, v)
7 SENÃO
8 SE w ≠ pai ENTÃO
9 Visitar aresta de retorno (v, w)
10 FIM SE
11 FIM SE
12 FIM PARA
13 FIM PROCEDIMENTO
14
15 Desmarcar todos os vértices de G
16 Escolher um vértice s
17 Busca (s, NULO)
Fonte: Adaptado de Szwarcfiter, 2018.
Convém ressaltar que visitar uma aresta significa efetuar uma operação espe-
cífica, por exemplo, adicionar em outro grafo. O procedimento Busca (v, pai)
recebe como parâmetros o vértice a ser analisado e o vértice anterior da busca, o
qual está sendo chamado de pai, para facilitar a compreensão.

O procedimento Busca executa algumas atividades, como:


• Linha 2: marca o vértice recebido para garantir que ele não seja novamente
escolhido.
• Linha 3: o vértice que está sendo processado retorna todos os seus vértices
adjacentes e, para cada um deles, é feita uma análise.
• Linhas 4, 5 e 6: se o vértice adjacente não está marcado, significa que ain-
da não foi processado, desse modo, visita a aresta e invoca recursivamen-
te o procedimento Busca, passando como parâmetros: o vértice adjacente
encontrado e o próprio vértice que estava sendo processado como pai. Ao
retornar dessa chamada recursiva, passa-se a processar o próximo vértice
adjacente.
• Linhas 7, 8 e 9: se o vértice adjacente está marcado, é necessário verificar se
ele não é igual ao seu próprio pai. Se for, ignora-se, pois acabou de ser pro-
cessado. Se não for, visita-se a aresta, chamada de aresta de retorno.

Especialmente na linha 6, o procedimento Busca (w, v) é invocado recursi-


vamente para cada vértice w adjacente a v, dado pelo laço da linha 3. Isso significa
que uma nova busca inicia, sendo o vértice w escolhido para ser o ponto inicial des-
sa busca. Quando há retorno de uma chamada recursiva, o processo é denomina-
do também de backtracking, isto é, o processo retorna para continuar o algoritmo
com os próximos vértices adjacentes.

Caminho mínimo e árvores geradoras 53


No grafo da Figura 1, por exemplo, se fosse assumido o vértice v1 como pon-
to inicial, na linha 3 seriam retornados os vértices adjacentes {v2, v4, v5}. O proce-
dimento é invocado recursivamente usando v2. Ao retornar, isto é, ao executar o
backtracking, ainda faltarão os vértices v4 e v5 para serem processados, os quais
serão usados nas próximas interações do laço.

As arestas visitadas são classificadas de duas formas: arestas de árvore e


arestas de retorno. As primeiras são as arestas encontradas na árvore da bus-
ca em profundidade. Uma aresta (v1, v2) é uma aresta de árvore se o vértice v2 foi
alcançado pela primeira vez pela aresta (v1, v2). Já as segundas são arestas (v1, v2)
que conectam o vértice v1 a um antecessor, nesse caso, v2, que já foi explorado.

O procedimento Busca, dentro de seu laço da linha 3, possui uma condicional


para verificar qual tipo de aresta está tratando. Se forem consideradas somente as
arestas de árvore (linha 5 do Algoritmo 2), por exemplo, para a construção de um
outro grafo (nesse caso, um subgrafo), o grafo resultante claramente não teria ci-
clos, pois nesse trecho, o algoritmo nunca visita uma aresta adjacente a um vértice
já marcado. Assim, é possível dizer que o algoritmo constrói uma árvore de busca
em profundidade.

O vértice escolhido como sendo o primeiro a ser visitado, tam-


Figura 1
Grafo G bém, é chamado de raiz da árvore de busca em profundidade.
v1
Para ilustrar e execução do Algoritmo 2, observe o grafo da Figura 1.

O algoritmo começa desmarcando todos os vértices e escolhe


qualquer um destes para ser a raiz da busca. Aqui, será selecionado
v5 v2
o vértice v1, mas poderia ser qualquer um, pois não há indicação no
algoritmo. Ao ser chamado pela primeira vez, o procedimento é in-
vocado com Busca (v1, NULO), pois nesse momento não há ne-
nhum vértice anterior a v1 na busca, nesse momento.

v4 v3 Ao entrar no procedimento, o vértice v1 é marcado e todos os vér-


tices adjacentes são retornados, a saber: {v2, v4, v5}. Isso significa que
Fonte: Elaborada pelo autor.
dentro do laço haverá uma volta para um desses vértices. Na primeira
volta, w = v2 e, como não está marcado, o processo entra no condicional
da linha 4. A aresta (v1, v2) é visitada e o procedimento Busca é invoca-
do, de maneira recursiva como Busca (v2, v1). O grafo estará como
Figura 2
Grafo G – Busca em v1 na Figura 2, em que o vértice marcado é representado com fundo mais
claro, a aresta de árvore visitada em tracejado e a aresta de retorno
v1
visitada com pontilhado.

Na chamada recursiva com Busca (v2, v1), o vértice analisado


é o v2, portanto, ele é marcado e seus vértices adjacentes são retor-
v5 v2
nados: {v1, v3, v4}. O laço da linha 3 será executado para cada um
desses vértices. Iniciando com v1, o condicional da linha 4 falha (pois
já está marcado) e o da linha 8 também (pois v1 é o pai de v2, ou seja,
foi passado como segundo parâmetro na chamada do procedimen-
to Busca). Desse modo, o laço retorna para obter o segundo vértice
v4 v3
adjacente a v2, que é v3.
Fonte: Elaborada pelo autor.

54 Teoria dos Grafos


Como v3 não está marcado, o processo entra no condicional da Figura 3
linha 4, visitando a aresta de árvore (v2, v3) e chamando o procedi- Grafo G – Busca em v2
mento recursivamente como Busca (v3, v2) (Figura 3). v1
Na chamada recursiva com Busca (v3, v2), o vértice a ser ana-
lisado é o v3, portanto, ele é marcado e seus vértices adjacentes são
retornados: {v2, v4}. O laço da linha 3 será executado para cada um
v5 v2
desses vértices. Iniciando com v2, o condicional da linha 4 falha (pois
já está marcado) e o da linha 8 também (pois v2 é o pai de v3, isto é,
foi passado como segundo parâmetro na chamada do procedimen-
to Busca). Desse modo, o laço retorna para obter o segundo vértice
adjacente a v3, que é v4.
v4 v3
Como v4 não está marcado, o processo entra no condicional da
Fonte: Elaborada pelo autor.
linha 4, visitando a aresta de árvore (v3, v4) e chamando o procedi-
mento recursivamente como Busca (v4, v3) (Figura 4).
Figura 4
Na chamada recursiva com Busca (v4, v3), o vértice analisado Grafo G – Busca em v3
é o v4, portanto, ele é marcado e seus vértices adjacentes são retor-
v1
nados: {v3, v2, v1, v5}. O laço da linha 3 será executado para cada um
desses vértices. Iniciando com v3, o condicional da linha 4 falha (pois
já está marcado) e o da linha 8 também (pois v3 é o pai de v4, isto é,
foi passado como segundo parâmetro na chamada do procedimento v5 v2
Busca). Assim, o laço retorna para obter o segundo vértice adjacente
a v4, que é v2.

Como v2 já está marcado, o processo entra no senão da linha 7


(Algoritmo 2). Como v2 não é o pai de v4, o processo visita a aresta
v4 v3
de retorno (v4, v2). Os condicionais terminam e o processo vai para
a próxima volta do laço da linha 3 para tentar analisar o próximo Fonte: Elaborada pelo autor.

vértice adjacente a v5.

Como v1 já está marcado, o processo entra no senão da linha 7.


Como v1 não é o pai de v4, o processo visita a aresta de retorno (v4, v1).
Os condicionais terminam e o processo vai para a próxima volta do Figura 5
laço da linha 3, analisando o próximo vértice adjacente a v4, que é v5. Grafo G – Busca em v4

Como v5 não está marcado, o processo entra no condicional da v1


linha 4, visitando a aresta de árvore (v4, v5) e chamando o procedi-
mento recursivamente como Busca (v5, v4) (Figura 5).

Na chamada recursiva com Busca (v5, v4), o vértice analisado


v5 v2
é o v5, portanto, ele é marcado e seus vértices adjacentes são retor-
nados: {v4, v1}. O laço da linha 3 será executado para cada um desses
vértices. Iniciando com v4, o condicional da linha 4 falha (pois já está
marcado) e o da linha 8 também (pois v4 é o pai de v5). Assim, o laço
retorna para obter o segundo vértice adjacente a v5, que é v1. v4 v3
Como v1 já está marcado, o processo entra no senão da linha 7. Fonte: Elaborada pelo autor.
Como v1 não é o pai de v5, o processo visita a aresta de retorno (v5, v1).
Os condicionais terminam e o processo vai para a próxima volta do
laço da linha 3, analisando o próximo vértice adjacente a v4, que é v1.

Caminho mínimo e árvores geradoras 55


Como não há mais vértices adjacentes a v5, o laço da linha 3 termina e a chama-
da recursiva também, retornando à última invocação de Busca (linha 6). Quando o
procedimento analisa o vértice v4, o grafo fica como na Figura 6.

No retorno da última chamada recursiva, o procedimento estava


Figura 6 analisando o vértice v4, cujos vértices adjacentes eram {v3, v2, v1 e v5}
Grafo G – Busca em v5 e já haviam sido analisados todos. Portanto, o laço da linha 3 termi-
v1 na e essa chamada recursiva termina, retornando à última invoca-
ção de Busca (linha 6).

No retorno da última chamada recursiva, o procedimen-


to estava analisando o vértice v3 cujos vértices adjacentes eram
v5 v2
{v2, v4} e já haviam sido todos analisados. Portanto, o laço da linha
3 termina e a chamada recursiva também, retornando à última in-
vocação de Busca (linha 6), quando o procedimento estava anali-
sando o vértice v2.
v4 v3 No retorno da última chamada recursiva, o procedimento estava

Fonte: Elaborada pelo autor.


analisando o vértice v2 cujos vértices adjacentes eram {v1, v3, v4} e já
haviam sido analisados os vértices v1 e v3. Portanto, o próximo vérti-
ce a ser analisado é o v4.

Como v4 já está marcado, o processo entra no senão da linha 7. Não sendo v4


pai de v2, o processo visita novamente a aresta de retorno (v2, v4). Os condicionais
terminam e o processo vai para a próxima volta do laço da linha 3.

Já que não há mais vértices adjacentes a v2, o laço da linha 3 termina e a chama-
da recursiva também, retornando à última invocação de Busca (linha 6), quando o
procedimento estava analisando o vértice v1.

No retorno da última chamada recursiva, o procedimento estava analisando o


vértice v1 cujos vértices adjacentes eram {v2, v4, v5} e já havia sido analisado o vértice
v2. Portanto, o próximo vértice a ser verificado seria o v4.

Como v4 já está marcado, o processo entra no senão da linha 7. Como v4 não é


o pai de v1, o processo visita novamente a aresta de retorno (v1, v4). Os condicionais
terminam e o processo vai para a próxima volta do laço da linha 3. O próximo vér-
tice a ser analisado na lista de adjacentes é o v5.

Uma vez que v5 já está marcado, o processo entra no senão da


Figura 7
Árvore de busca em profundidade de G linha 7. Como v5 não é o pai de v1, o processo visita novamente a
v1 aresta de retorno (v1, v5). Os condicionais terminam e o processo vai
para a próxima volta do laço da linha 3.

Já que não há mais vértices adjacentes a v1, o laço da linha 3 ter-


mina e a chamada do procedimento Busca também, finalizando o
v5 v2
processo de busca em profundidade.

Como resultado, a Figura 7 apresenta a árvore de busca em pro-


fundidade resultante da aplicação do algoritmo que contém o vérti-
ce v1 como raiz. Na composição foram usados somente os vértices
v4 v3 visitados na linha 5 do algoritmo, que são os vértices de árvore.

Fonte: Elaborada pelo autor.

56 Teoria dos Grafos


Um subgrafo de G é dito subgrafo gerador se possui todos os vértices de G. Se
esse subgrafo for uma árvore, ele é denominado árvore geradora.

As arestas de árvore encontradas pela aplicação do Algoritmo 2, que podem ser


vistas na Figura 7, foram: A’ = {(v1, v2), (v2, v3), (v3, v4), (v4, v5)}. Assim, o grafo T = (V, A’),
resultante do processo de busca em profundidade, é uma árvore geradora do grafo
G = (V, A).

Outro tipo de busca que pode ser efetuado é a busca em largura pelo gra- Saiba mais
fo. Ela é feita quando se escolhe o vértice incidente menos recentemente alcança- Fila é uma estrutura de dados
do na busca. Para isso, assim que se obtém a lista de vértices adjacentes, deve-se baseada em uma lista linear em
enfileirá-los em uma estrutura de dados Fila. Toda vez que se escolhe um vértice, que todas as operações são feitas
nas suas extremidades. O início da
deve-se obtê-lo retirando-o da fila; toda vez que um vértice é marcado, deve-se en- fila é chamado de frente e o final
fileirá-lo. O Algoritmo 3 apresenta o pseudocódigo da busca em largura. de trás. O modelo intuitivo de uma
fila é o mesmo usado em filas de
Algoritmo 3 bancos, aeroportos, mercados etc.
Busca em largura Uma pessoa que chega na fila
Dados: Grafo conexo G = (V, A) entra na extremidade de trás, e a
próxima que sai, para ser servida, é
1 PROCEDIMENTO Busca Largura(s)
a que está no início (frente).
2 Q <- Fila Vazia
Assim, esse padrão é seguido na
3 Marcar s estrutura de dados Fila, isto é,
4 Inserir s em Q quando se insere um elemento
na fila, este sempre é inserido
5 ENQUANTO Q ≠ ∅ FAÇA
na extremidade de trás; quando
6 v <- Primeiro Elemento de Q um elemento é retirado, sempre
7 PARA w ∈ Adj(v) FAÇA é removido da extremidade da
frente. Como não há remoção ou
8 SE w não está marcado ENTÃO
inserção de elementos em outras
9 Visitar aresta de árvore (v, w) posições da fila, duas operações
10 Marcar w de manipulação são permitidas:
inserir ou enfileirar e remover ou
11 Inserir w em Q desenfileirar.
12 SENÃO
13 SE w está em Q ENTÃO
14 Visitar aresta de retorno (v, w)
15 FIM SE
16 FIM SE
17 FIM PARA
18 Retirar v de Q
19 FIM ENQUANTO
20 FIM PROCEDIMENTO
21
22 Desmarcar todos os vértices de G
23 Escolher um vértice s
24 BuscaLargura(s)
Fonte: Adaptado de Szwarcfiter, 2018.
Se forem consideradas somente as arestas de árvore (linha 9 do Algoritmo 3)
para a construção de um outro grafo (nesse caso, um subgrafo), o resultado cla-
ramente não teria ciclos, pois nesse trecho o algoritmo nunca visita uma aresta
adjacente a um vértice já marcado. Assim, diz-se que o algoritmo constrói uma
árvore de busca em largura. O vértice escolhido como sendo o primeiro a ser
visitado também é chamado de raiz da árvore de busca em largura.

Caminho mínimo e árvores geradoras 57


Para ilustrar e execução do Algoritmo 3, considere novamente o grafo da
Figura 1. O algoritmo começa desmarcando todos os vértices e escolhe qualquer
um destes para ser a raiz da busca. Aqui, será escolhido o vértice v1, mas poderia
ser qualquer um, pois não há indicação no algoritmo. Ao ser chamado pela primeira
vez, o procedimento é denominado como BuscaLargura(v1). Para essa execução
será usada uma Fila denotada por Q e composta por uma coleção de elementos,
no caso, de vértices.

O que caracteriza uma fila é o local de inserção e remoção dos elementos.


Pode-se fazer uma analogia, por exemplo, com uma fila de banco: sempre que você
chega nela, precisa ficar no final; a pessoa a ser atendida sempre é a que está no
início. Desse modo, sempre que um elemento é inserido na fila isso é feito na parte
de trás, enquanto que a remoção do elemento é feita na parte da frente. A Figura 8
mostra uma fila com alguns elementos já inseridos.
Figura 8
Fila Q

d a f b d
Frente Trás
Fonte: Elaborada pelo autor.
Ao incorporar o elemento c na Fila Q, ele é colocado na parte de trás, logo após
o elemento d. Com a inserção, a fila fica como mostrado na Figura 9.
Figura 9
Fila Q com a inserção do elemento c

d a f b d c
Frente Trás
Fonte: Elaborada pelo autor.
Caso haja uma remoção na Fila Q, o elemento a ser extraído é sempre o que se
encontra na frente da fila, que, no caso, é o elemento d. Havendo a retirada, a fila
fica como mostrado na Figura 10.
Figura 10
Fila Q com a remoção de um elemento

a f b d c
Frente Trás
Fonte: Elaborada pelo autor.
O procedimento BuscaLargura inicia e a fila Q é criada e tornada vazia,
marcando-se o vértice inicial v1 e inserindo-o na fila (Figura 11).

Figura 11
Busca em largura - Vértice v1

v1

Fila Q

v5 v2 V1
Frente Trás

v4 v3
Fonte: Elaborada pelo autor.

58 Teoria dos Grafos


O laço da linha 5 serve para que o procedimento só termine depois que não haja
elementos para serem processados na fila. Ao longo da execução do laço, novos
vértices são inseridos e removidos.

Na primeira volta do laço, a variável v recebe o primeiro elemento da fila, no caso,


v1. O laço da linha 7 varre todos os elementos adjacentes a v1, a saber, {v2, v4 e v5},
e, para cada volta do laço, um desses é analisado.

Inicia-se com v2, como não está marcado, e visita a aresta de árvore (v1, v2).
Marca-se v2 e insere-se v2 em Q. O resultado pode ser visto na Figura 12.
Figura 12
Busca em largura – Vértice v2

v1

Fila Q

v5 v2 V1 V2
Frente Trás

v4 v3
Fonte: Elaborada pelo autor.

O mesmo processo dentro desse laço é feito para v4 e v5. Como nenhum desses
está marcado, o procedimento sempre entra no condicional da linha 8. O resultado
é apresentado na Figura 13.
Figura 13
Busca em largura – Vértices v4 e v5

v1

Fila Q

v5 v2 V1 V2 V4 V5
Frente Trás

v4 v3
Fonte: Elaborada pelo autor.
Ao término do laço da linha 7, a linha 18 é executada retirando-se da fila o vértice
v, que, nesse caso, vale v1, sobrando para serem processados os vértices v2, v4 e v5.

Ao retornar à linha 5, o processo verifica que a fila não está vazia. Na linha 6,
obtém-se o primeiro elemento da fila, no caso, v2. O laço da linha 7 varre todos os
elementos adjacentes a v2, no caso {v1, v4, v3}, e, para cada volta do laço, um desses
vértices é analisado.

Inicia-se com v1, como está marcado, e executa-se o caso contrário na linha 12.
O condicional da linha 13 verifica se v1 está na fila; como não está, o condicional
termina, retornando ao próximo vértice adjacente a v2.

O próximo vértice a ser analisado pelo laço da linha 7 é v4. Como já está mar-
cado, executa o caso da linha 12 e, no condicional da linha 13, encontra v4 ainda

Caminho mínimo e árvores geradoras 59


na fila. Assim, visita-se a aresta de retorno (v2, v4) e termina-se essa volta do laço
retornando ao próximo vértice adjacente a v2.
Em seguida, analisa-se v3. Como não está marcado, entra no condicional da li-
nha 8, visitando a aresta (v2, v3), marcando o vértice v3 e inserindo v3 na fila. Em
seguida, finaliza o condicional e retorna ao laço da linha 7. Como v2 não tem mais
vértices adjacentes, termina-se esse laço e executa-se a linha 18, retirando v2 da fila.
O resultado pode ser visto na Figura 14.

Figura 14
Busca em largura – Término do processamento de v2

v1

Fila Q

v5 v2 V4 V5 V3
Frente Trás

v4 v3
Fonte: Elaborada pelo autor.
O laço da linha 5 reinicia. Na linha 6, o vértice v4 é atribuído a v e, na linha 7,
inicia-se o laço sobre todos os elementos adjacentes a v4, a saber, {v3, v2, v1, v5}.
Analisando o vértice v3, percebe-se que ele já está marcado, então, entra no caso
contrário da linha 12. Como v3 está na fila, executa a linha 14, que visita a aresta de
retorno (v4, v3). Ao final, retorna à próxima volta do laço da linha 7.
Analisando o vértice v2, percebe-se que ele já está marcado, então, entra no caso
contrário da linha 12. Como v2 não está na fila, termina o condicional sem visitar a ares-
ta (pois ela já foi visitada). Ao final, retorna à próxima volta do laço da linha 7.
Também o vértice v1 já está marcado, assim, entra no caso contrário da linha 12.
Como v1 não está na fila, termina o condicional sem visitar a aresta (pois ela já foi visi-
tada). Ao final, retorna à próxima volta do laço da linha 7.
Já o vértice v5, que também está marcado, entra no caso contrário da linha
12. Como v5 está na fila, executa a linha 14, que visita a aresta de retorno (v4, v5).
Ao final, retorna à próxima volta do laço da linha 7. Terminando o laço da linha 7,
pois os vértices adjacentes de v4 acabaram, a execução do procedimento sai do laço
e executa a linha 18, removendo v4 da fila. O resultado pode ser visto na Figura 15.

Figura 15
Busca em largura – Término do processamento de v4

v1

Fila Q

v5 v2 V5 V3
Frente Trás

v4 v3
Fonte: Elaborada pelo autor.

60 Teoria dos Grafos


O laço da linha 5 reinicia. Na linha 6, o vértice v5 é atribuído a v e, na linha 7,
inicia-se o laço sobre todos os elementos adjacentes a v5, a saber, {v4, v1}.

Analisando o vértice v4, percebe-se que ele já está marcado, então, entra no caso
contrário da linha 12. Como v4 não está na fila, termina o condicional sem visitar a
aresta (pois ela já foi visitada). Ao final, retorna à próxima volta do laço da linha 7.

O vértice v1 também está marcado, assim, entra no caso contrário da linha 12.
Como v1 não está na fila, termina o condicional sem visitar a aresta (pois ela já foi
visitada). Ao final, retorna à próxima volta do laço da linha 7.

Terminando o laço da linha 7, pois os vértices adjacentes de v5 acabaram, sai do


laço e executa a linha 18, removendo v5 da fila. O resultado pode ser visto na Figura 16.
Figura 16
Busca em largura – Término do processamento de v5

v1

Fila Q

v5 v2 V3
Frente Trás

v4 v3
Fonte: Elaborada pelo autor.
O laço da linha 5 reinicia. Na linha 6, o vértice v3 é atribuído a v e, na linha 7,
inicia-se o laço sobre todos os elementos adjacentes a v3, a saber, {v4, v2}.

Analisando o vértice v4,, percebe-se que ele já está marcado, então, entra no caso
contrário da linha 12. Como v4 não está na fila, termina o condicional sem visitar a
aresta (pois ela já foi visitada). Ao final, retorna à próxima volta do laço da linha 7.

O vértice v2 também está marcado, assim, entra no caso contrário da linha 12.
Como v2 não está na fila, termina o condicional sem visitar a aresta (pois ela já foi
visitada). Ao final, retorna à próxima volta do laço da linha 7.

Terminando o laço da linha 7, pois os vértices adjacentes a v3 acabaram, sai


do laço e executa a linha 18, removendo v3 da fila. O resultado pode ser visto na
Figura 17.

Figura 17
Busca em largura – Término do processamento de v3

v1

Fila Q

v5 v2
Frente Trás

v4 v3
Fonte: Elaborada pelo autor.

Caminho mínimo e árvores geradoras 61


Já que a fila está vazia, o laço da linha 5 termina e a busca em largura é finaliza-
da. Como resultado, a Figura 18 apresenta a árvore de busca em largura resultante
da aplicação do algoritmo, que contém o vértice v1 como raiz. Para a composição,
são usadas somente as arestas visitadas na linha 9 do algoritmo, que são as arestas
de árvore.

Figura 18 As arestas de árvore encontradas foram: A’ = {(v1, v2), (v1, v4), (v1, v5),
Árvore de busca em largura (v2, v3)}. Assim, o grafo T = (V, A’), resultante do processo de busca em
v1 largura, também é uma árvore geradora do grafo G = (V, A).

Os procedimentos de busca apresentados foram aplicados


a grafos não orientados e conexos. Percebe-se que todo grafo
não orientado conexo tem, pelo menos, uma árvore geradora.
v5 v2
Nos exemplos mostrados são conseguidas duas árvores gerado-
ras, mas, trocando a ordem de escolha dos vértices, facilmente
chega-se a outras árvores.

Por suas características, uma árvore com n vértices possui exata-


v4 v3 mente n-1 arestas, portanto, a árvore geradora de um grafo conexo
não orientado com n vértices tem exatamente n-1 arestas.
Fonte: Elaborada pelo autor.

3.2 Árvore Geradora Mínima


Vídeo Encontrar uma árvore geradora mínima é muito importante na teoria dos gra-
fos, pois vários problemas reais podem ser mapeados e solucionados por ela.

Por exemplo, para efetuar o projeto de uma rede de fibra ótica entre os nós,
desconsiderando redundâncias, é preciso que todos os nós estejam conectados, e
o objetivo é gastar o mínimo possível. Em um extremo, pode-se conectar todos os
n nós com todos os outros, criando um grafo completo Kn. Se há um custo consi-
n (n-1)
derável na ligação entre nós, este será em média multiplicado por , que é o
2
número de arestas que um grafo completo Kn possui.

Assim, dado um grafo conexo, um conjunto de arestas que o mantém – todos os


vértices são alcançáveis – é uma árvore geradora. Se houver um custo associado, o
objetivo é conseguir uma árvore geradora mínima.

Supondo que há a necessidade de asfaltar estradas entre cidades, com um dado


Leitura
conjunto de municípios e vias, o objetivo é asfaltar determinado subconjunto para
Uma formulação detalhada
desse problema e das
que todas as cidades sejam interligadas por vias asfaltadas e que o custo seja míni-
técnicas de resolução, mo (BARROSO, 2014). Nesse caso, vários fatores devem ser analisados e considera-
como a aplicação de
Árvores Geradoras
dos para o custo de pavimentação de vias, como aspectos geológicos, de traçado,
Mínimas e Árvore de hidrológicos etc. Assim, para a modelagem do problema, assume-se que essas in-
Steiner, pode ser vista no
artigo Aplicação de grafos
formações já foram obtidas e que, para a análise matemática, tem-se um grafo no
em um problema de rede. qual os vértices são as cidades, as arestas são as estradas que as conectam e cada
BARROSO, M. M. de A. Abakós, v. aresta é ponderada com o custo de pavimentação.
2, n. 2, p. 48-78, 30 maio 2014.
Disponível em: http://periodicos. Analisando esse grafo, conectar todas as cidades com estradas pavimentadas a
pucminas.br/index.php/abakos/arti-
um custo mínimo significa encontrar um conjunto de estradas a serem asfaltadas
cle/view/P.2316-9451.2014v2n2p48.
Acesso em: 29 maio 2020. de tal forma que todas as cidades sejam alcançadas sem grandes valores, isto é,
não havendo redundância (ciclos). Esse conjunto de arestas, juntamente com seus

62 Teoria dos Grafos


vértices incidentes, será uma árvore (pois não possui ciclos) geradora, já que conta
com todos os vértices do grafo original e é mínima, uma vez que o objetivo é encon-
trar o custo mínimo de pavimentação.

Assim, um dos problemas clássicos em grafos é encontrar uma árvore geradora


mínima em um grafo não dirigido com custos (ou pesos) nas arestas. Para isso,
faz-se necessário definir alguns conceitos.

Dado um grafo G não dirigido com custos, o custo de cada aresta


pode ser positivo ou negativo e o custo de um subgrafo ou uma Figura 19
Grafo ponderado
árvore de G é a soma dos custos de cada aresta.
v2 5 v4
Uma árvore geradora mínima de um grafo G, também conhecida
como minimum spanning tree (MST), é uma árvore geradora de G com
custo mínimo. Em outras palavras, é uma árvore geradora com custo 6
menor dentre todas as possíveis árvores geradoras de G.
10
Convém ressaltar que, se todas as arestas tiverem o mesmo custo, v1 1
então, qualquer árvore geradora é mínima, pois conta com o mesmo
número de arestas, os mesmos custos em cada aresta e, portanto, o
2
mesmo custo total.

Observe o grafo da Figura 19. Claramente, ele conta com várias


árvores geradores. v3

Partindo de v1 como vértice raiz, a Figura 20 apresenta duas Fonte: Elaborada pelo autor.
dessas árvores.

Figura 20
Árvores geradoras

v2 v4 v2 5 v4

6
10
1
v1 v1

2 2

v3 v3

Fonte: Elaborada pelo autor.

Ao calcular o custo da árvore geradora da esquerda, somando os custos das


arestas, o valor total é 18. Já o valor total da árvore da direita é 8.

De acordo com Kruskal (1956) e Prim (1957), dois algoritmos são apresentados
para encontrar a MST de um grafo: o algoritmo de Kruskal (concebido em 1956) e
o algoritmo de Prim (concebido em 1957). Ambos são aplicados a grafos conexos
ponderados, nos quais os pesos não são negativos.

Caminho mínimo e árvores geradoras 63


Os algoritmos que encontram uma MST são de busca gulosa, isto é, a cada passo
selecionam a melhor aresta possível para compor a árvore. O Algoritmo 4 apresen-
ta o algoritmo de Prim para encontrar uma árvore geradora mínima (PRIM, 1957).

Algoritmo 4
Árvore Geradora Mínima – Algoritmo de Prim
Dados: Grafo conexo ponderado G = (V, A)
1 v <- Um vértice qualquer do grafo
2 T <- {v}
3 Tmin <- ∅
4 V’ <- V \ {v}
5 ENQUANTO V’ ≠ ∅ FAÇA
6 Encontrar aresta (t, v’) ∈ A tal que t ∈ T e v’ ∈ V’, sendo o custo de (t,v’) o menor valor
7 T <- T ∪ {v’}
8 V’ <- V’ \ {v’}
9 Tmin <- Tmin ∪ (t, v’)
10 FIM ENQUANTO
Fonte: Adaptado de Goldbarg; Goldbarg, 2012.

O algoritmo de Prim é simples e inicia escolhendo-se um vértice para ser a raiz


da árvore. Logo após, ele mantém três estruturas auxiliares: V’, T e Tmin.

O conjunto V’ mantém os vértices que ainda não foram escolhidos pelo algoritmo.
Inicialmente, ele recebe o mesmo conjunto V (vértices do grafo) subtraído do vérti-
ce escolhido como raiz da árvore. O conjunto V’ faz com que o algoritmo não esco-
lha uma aresta a um vértice já usado na árvore, evitando ciclos. O conjunto T, que
inicia com o vértice raiz, a cada volta do laço é adicionado ao vértice cuja aresta foi
Saiba mais recentemente escolhida. O conjunto Tmin inicia vazio e, ao final do algoritmo, terá
Apesar de simples, o algoritmo todas as arestas que fazem parte da árvore geradora mínima.
de Prim apresentado é ineficiente.
O algoritmo possui um laço que é repetido enquanto o conjunto V’ não é
Sua eficácia depende do processo
de escolha da aresta pertencente vazio, isto é, enquanto ainda existem vértices para serem adicionados à árvore.
à árvore e à estrutura de dados Dentro do laço, o algoritmo escolhe a aresta que dá o menor valor entre um vér-
utilizada. Para a implementação
simples aqui representada, usando tice já escolhido na árvore (conjunto T) e entre um vértice ainda não escolhido
uma matriz de adjacências, a (conjunto V’).
complexidade é O (|A|*|V|).
Logo após, atualizam-se os conjuntos auxiliares. A T é adicionado o vértice
Com uma implementação usando
uma heap binária, chega-se a que foi escolhido; de V’ é subtraído o mesmo vértice escolhido, para que não
O(|A| log |V|), que é um ganho se repita na árvore; e em Tmin é acrescentada a aresta de menor custo. Ao final
significativo (JOHNSON, 1975).
Com o uso de outras estruturas
do algoritmo, o conjunto Tmin contém todas as arestas participantes da árvore
mais elaboradas, como uma geradora mínima.
heap de Fibonacci, consegue-se
uma complexidade de O(|V| O algoritmo de Kruskal constrói a árvore geradora mínima de uma forma um
log |V| + |A|), que é muito pouco diferente. Enquanto o algoritmo de Prim inclui vértices para a geração da
boa para grafos esparsos
árvore, Kruskal está voltado para inclusão de arestas (KRUSKAL, 1956). Confira um
(FREDMAN; TARJAN, 1987).
exemplo no Algoritmo 5.

64 Teoria dos Grafos


Algoritmo 5
Árvore Geradora Mínima – Algoritmo de Kruskal
Dados: Grafo conexo ponderado G = (V, A)
1 Ordenar as arestas ai em ordem crescente sobre seu custo no vetor A’
2 A’ <- [ai], i = 1, 2, ..., |A|
3 Tmin <- A’[1]
4 PARA TODO ai ∈ A’, i = 2, 3, ..., |A| FAÇA
5 SE Tmin ∪ ai é um grafo acíclico ENTÃO
6 Tmin <- Tmin ∪ ai
7 FIM SE
8 FIM PARA

Fonte: Adaptado de Goldbarg; Goldbarg, 2012.


Saiba mais
O algoritmo de Kruskal utiliza duas estruturas auxiliares: Tmin e A’. O conjunto
Tmin recebe as arestas que fazem parte da árvore sendo construída. Ao final do O algoritmo de Kruskal também é
muito simples, mas sua complexi-
algoritmo, Tmin contém a árvore geradora mínima. O vetor A’ mantém as arestas dade reside em ordenar as arestas
ordenadas em ordem crescente por peso. Assim, o primeiro passo do algoritmo é e verificar se a inclusão de uma
aresta gera um grafo acíclico.
ordenar essas arestas para que o laço interno faça a varredura em ordem.
A implementação mais eficiente
O algoritmo possui um laço (linha 4) que termina quando todas as arestas, de conhecida tem complexidade
maneira ordenada, forem analisadas. A cada volta do laço verifica-se uma aresta. O(|A| log |V|) e faz uso de
otimizações na representação e
Se a inclusão dessa aresta mantém o grafo acíclico, desse modo, a aresta é adicio- verificação de conjuntos disjuntos.
nada; caso contrário, é ignorada. A estrutura chamada UNION-FIND,
usando técnicas como union
Assim que a árvore for construída, mesmo que mais arestas sejam analisadas, o by rank e path compression
condicional da linha 5 não é satisfeito, pois a inclusão de mais arestas leva a ciclos, (CP-ALGORITHMS, 2020), é capaz
de melhorar o desempenho do
o que garante que não serão inseridas mais arestas do que as necessárias para a
algoritmo de Kruskal.
árvore (no caso |V|–1 arestas).

Vê-se que os algoritmos de Prim e Kruskal, para encontrar uma árvore


geradora mínima, são simples, mas suas complexidades dependem de ou-
tras estruturas de dados. Descobrir os gargalos de um algoritmo não é tarefa fácil
e, muitas vezes, uma operação que inicialmente parece simples pode depreciar o
desempenho de um programa de maneira drástica.

3.3 Caminho Mínimo


Vídeo Percebe-se que os processos de busca em profundidade e largura apresentados
caminham por todos os vértices do grafo, mas claramente é possível alterá-los para
partir de um vértice v e chegar a outro vértice w. Assim, consegue-se encontrar uma
sequência de vértices que determina um caminho de v a w.

O custo de um caminho em grafos ponderados, isto é, com pesos nas arestas,


é dado pela soma dos pesos de todas as arestas que fazem parte do caminho. Em
um grafo não ponderado, define-se como caminho mínimo entre o vértice v1 e v2 o
caminho de menor tamanho, isto é, menor número de arestas entre v1 e v2.

Em razão da natureza do procedimento de busca em profundidade, não há


como garantir que o caminho encontrado é o caminho mínimo. Para isso, em gra-
fos não ponderados, deve-se efetuar uma busca em largura pelo grafo.

Caminho mínimo e árvores geradoras 65


Para grafos ponderados, o caminho mínimo entre o vértice v1 e v2 é o caminho
cuja soma dos pesos nas arestas possui o menor valor. Assim, em grafos pondera-
dos, o caminho mínimo pode não ser aquele que possui menor número de arestas.

O algoritmo de Dijkstra, publicado em 1959, rotula todos os vértices do grafo


por meio de um vértice origem, indicando qual o menor caminho entre esse vértice
e qualquer outro do grafo. Assim, ao final do algoritmo, consegue-se o caminho
mínimo entre o vértice origem e qualquer outro vértice, bastando caminhar pela
rotulação efetuada partindo do vértice destino.

Algoritmo 6
Caminho Mínimo em Grafo Ponderado – Algoritmo de Dijkstra
Dados: Grafo conexo ponderado G = (V, A), D = {dij}, em que dij é o peso da aresta entre o
vértice i e j, um vértice inicial da busca s
1 PARA v ∈ V FAÇA
2 rot[v] <- 0
3 dt[v] <- ∞
4 FIM PARA
5 dt[s] <- 0
6 V’ <- V
7 ENQUANTO V’ ≠ ∅ FAÇA
8 v <- elemento de V’, tal que dt [v] é o menor entre os elementos de V’
9 V’ <- V’ \ {v}
10 PARA u ∈ Adj(v) FAÇA
11 SE dt[v]+dvu < dt[u] ENTÃO
12 dt[u] <- dt[v]+ dvu
13 rot[u] <- v
14 FIM SE
15 FIM PARA
16 FIM ENQUANTO
Fonte: Adaptado de Goldbarg; Goldbarg, 2012.

O Algoritmo 6 apresenta o algoritmo de Dijkstra e tem como objetivo encontrar


o caminho mínimo entre um vértice e qualquer outro vértice do grafo. Seu funcio-
namento não é exato se houver pesos negativos nas arestas, portanto, usa-se so-
mente para quando todos os pesos são positivos.

Tendo como ponto de partida um vértice inicial s, esse algoritmo cria rótulos para
cada vértice do grafo, indicando sua distância a partir de v e qual vértice foi usado para
Saiba mais
chegar até ele. Esses rótulos são mantidos por duas estruturas auxiliares, dt e rot, em
Segundo Goldbarg e Goldbarg
(2012), para encontrar o caminho
que dt mantém as distâncias a partir de v e rot mantém o vértice adjacente do caminho.
mínimo em grafos pondera- As linhas de 1 a 6 são usadas para inicializar os dados auxiliares e os rótulos.
dos, quando há a presença de
pesos negativos, pode-se usar Fora o rótulo do vértice inicial, o laço da linha 1 inicia todos os rótulos com zero e
o algoritmo de Bellman-Ford, todas as distâncias com ∞.
de 1956.
O laço da linha 7 é executado enquanto o conjunto auxiliar V’, que foi inicializado
Agora, para encontrar o caminho
mínimo entre todos os pares de com todos os vértices na linha 6, não for vazio. A cada volta do laço, um elemento
vértices de um grafo, usa-se o de V’ é escolhido, sendo o que possui a menor distância. Perceba que na primeira
algoritmo de Floyd-Warshall, de
1959 (FLOYD, 1962). volta será escolhido o vértice inicial cuja distância foi iniciada com zero, sendo os
demais iniciados com ∞.

66 Teoria dos Grafos


Na linha 9, o vértice escolhido v é retirado de V’ e o laço da linha
10 varre todos os vértices adjacentes a v.

O condicional da linha 11 verifica se a distância do vértice escolhi-


do v, acrescida do peso da aresta (v, u), é menor que o valor da distân-
cia do vértice u. Se sim, significa que foi encontrado um caminho
melhor de s (vértice inicial) até u e que, portanto, o valor da distância
e seu rótulo devem ser atualizados (linhas 12 e 13). Perceba que se o
vértice u ainda não foi visitado, seu valor de distância está inicializado
com ∞, portanto, será sempre atualizado na primeira visita.

Para ilustrar a execução do algoritmo, considere o grafo pon-


derado da Figura 21. O algoritmo inicia definindo os rótulos para
cada vértice, que nas representações gráficas apresentadas serão
adicionados perto do vértice para melhor entendimento, como
mostra a Figura 22.
Figura 22
Em cada caixa perto do vértice, o primeiro compartimento indi-
Estruturas inicializadas
ca o rótulo de vértice (rot) e o segundo a distância (dt). A Figura 22
apresenta as estruturas após a inicialização que ocorre nas linhas
0 ∞ 0 ∞
de 1 a 5. v2 5 v4
Na primeira volta do laço, V’ contém todos os vértices do grafo
(inicializado na linha 6), portanto, V’ = {v1, v2, v3, v4, v5}. O primeiro ele- 10
mento de V’ que possui a menor distância é v1.

O vértice v1 é removido de V’ na linha 9, portanto, V’ = {v2, v3, v4, 1 2


v1
v5}. Na linha 10 busca-se e varre-se todos os vértices adjacentes a 6
v1, nesse caso, {v2, v3, v5}. 0 0
8
Para v2, verifica-se se dt[v1] (que é zero), acrescido do custo da
3
aresta (v1, v2) (que é 10), é menor que dt[v2] (que é infinito). Como é
menor, desse modo, a distância dt[v2] recebe 10 e o rótulo rt[v2] assu- v3 v5
me o vértice v1. O laço, então, retorna para processar o próximo vér-
tice adjacente a v1. O grafo e as estruturas ficam como na Figura 23. 0 ∞ 0 ∞
Fonte: Elaborada pelo autor.
Figura 23
Processamento de (v1, v2)
v1 10 0 ∞
v2 5 v4

10

1 2
v1
6
0 0
8
3

v3 v5

0 ∞ 0 ∞
Fonte: Elaborada pelo autor.

Caminho mínimo e árvores geradoras 67


Figura 24 Para v3, verifica-se se dt[v1] (que é zero), acrescido do custo da
Processamento V1 10 0 ∞ aresta (v1, v3) (que é 8), é menor que dt[v3] (que é infinito). Como é
de (v1, v3)
v2 5 v4 menor, a distância dt[v3] recebe 8 e o rótulo rt[v3] assume o vérti-
ce v1. O laço, assim, retorna para processar o próximo vértice ad-
jacente a v1. O grafo e as estruturas ficam como na Figura 24.
10
Para v5, verifica-se se dt[v1] (que é zero), acrescido do custo da

1 2 aresta (v1, v5) (que é 3), é menor que dt[v5] (que é infinito). Como é
v1 menor, a distância dt[v5] recebe 3 e o rótulo rt[v5] recebe o vértice
6
v1. O laço retorna para processar o próximo vértice adjacente a v1.
0 0
O grafo e as estruturas ficam como na Figura 25.
8
3 Como não há mais vértices adjacentes a v1, o laço das linhas
10 a 15 termina e o processo retorna ao laço da linha 7. Como o
v3 v5
conjunto V’ ainda não é vazio, mais uma volta desse laço será
executada.
V1 8 0 ∞
Fonte: Elaborada pelo autor.
Na linha 8 é escolhido o elemento de V’ = {v2, v3, v4, v5} que
Figura 25 possui a menor distância dt, nesse caso, v5. Na linha 9, o vértice v5
Processamento V1 10 0 ∞ é removido de V’ e, portanto, V’ = {v2, v3, v4}. Já na linha 10 busca-se
de (v1, v5)
v2 5 v4 e varre-se todos os vértices adjacentes a v5, nesse caso, {v1, v4}.

Para v1, verifica-se se dt[v5] (que é 3), acrescido do custo da


aresta (v5, v1) (que é 3), é menor que dt[v1] (que é zero). Como não
10
é menor, não faz qualquer atualização, e o grafo e as estruturas
1 2 são mantidos da mesma forma. O laço, assim, retorna para pro-
v1 cessar o próximo vértice adjacente a v5.
6
0 0 Para v4, checa-se se dt[v5] (que é 3), acrescido do custo da
8 aresta (v5, v4) (que é 2), é menor que dt[v4] (que é infinito). Como
3 é menor, a distância dt[v4] recebe 5 e o rótulo rt[v4] assume o
vértice v5. O laço, então, retorna para processar o próximo vértice
v3 v5
adjacente a v5. O grafo e as estruturas ficam como na Figura 26.

V1 8 V1 3 Como não há mais vértices adjacentes a v5, o laço das linhas 10 a


Fonte: Elaborada pelo autor.
15 termina e o processo retorna ao laço da linha 7. Como o conjunto
Figura 26 V’ ainda não é vazio, mais uma volta desse laço é executada.
Processamento V1 10 V5 5
de (v5, v4) Na linha 8 é escolhido o elemento de V’ = {v2, v3, v4} que possui
v2 5 v4 a menor distância dt, nesse caso, v4. Na linha 9, o vértice v4 é
removido de V’, portanto, V’ = {v2, v3}. Já na linha 10 busca-se e

10 varre-se todos os vértices adjacentes a v4, nesse caso, {v2, v3, v5}.

Para v2, verifica-se se dt[v4] (que é 5), acrescido do custo da


1 2 aresta (v4, v2) (que é 5), é menor que dt[v2] (que é 10). Como não
v1
6 é menor, não faz qualquer atualização, e o grafo e as estruturas
0 0 são mantidos da mesma forma. O laço, então, retorna para pro-
8 cessar o próximo adjacente a v4.
3
Para v3, checa-se se dt[v4] (que é 5), acrescido do custo da
v3 v5 aresta (v4, v3) (que é 6), é menor que dt[v3] (que é 8). Como não
é menor, não faz qualquer atualização, e o grafo e as estruturas
V1 8 V1 3
Fonte: Elaborada pelo autor.

68 Teoria dos Grafos


são mantidos da mesma forma. O laço, desse modo, retorna para processar o
próximo vértice adjacente a v4.

Para v5, verifica-se se dt[v4] (que é 5), acrescido do custo da aresta (v4, v5) (que é
2), é menor que dt[v5] (que é 3). Como não é menor, não faz qualquer atualização, e
o grafo e as estruturas são mantidos da mesma forma. O laço, então, retorna para
processar o próximo vértice adjacente a v4.

Como não há mais vértices adjacentes a v4, o laço das linhas 10 a 15 termina e
o processo retorna ao laço da linha 7. Como o conjunto V’ ainda não é vazio, mais
uma volta desse laço é executada.

Na linha 8 é escolhido o elemento de V’ = {v2, v3} que possui a menor distância dt,
nesse caso, v3. Na linha 9, o vértice v3 é removido de V’, portanto, V’ = {v2}. A linha 10
busca e varre todos os vértices adjacentes a v3, nesse caso, {v1, v2, v4}.

Para v1, verifica-se se dt[v3] (que é 8), acrescido do custo da aresta (v3, v1) (que é
8), é menor que dt[v1] (que é 0). Como não é menor, não se faz qualquer atualiza-
ção, e o grafo e as estruturas são mantidos da mesma forma. O laço, assim, retorna
para processar o próximo vértice adjacente a v3.

Para v2, checa-se se dt[v3] (que é 8), acrescido do custo da aresta (v3, v2) (que é 1),
é menor que dt[v2] (que é 10). Como é menor, a distância dt[v2] recebe 9 e o rótulo
rt[v2] assume o vértice v3. O laço, desse modo, retorna para processar o próximo
vértice adjacente a v3. O grafo e as estruturas ficam como na Figura 27.

Para v4, verifica-se se dt[v3] (que é 8), acrescido do custo da


Figura 27
aresta (v3, v4) (que é 6), é menor que dt[v4] (que é 5). Como não Processamento de (v3, v2)
é menor, não faz qualquer atualização, e o grafo e as estruturas
V3 9 V5 5
são mantidos da mesma forma. O laço, então, retorna para pro-
cessar o próximo vértice adjacente a v3. v2 5 v4

Como não há mais vértices adjacentes a v3, o laço das linhas 10


a 15 termina e o processo retorna ao laço da linha 7. Como o con- 10
junto V’ ainda não é vazio, mais uma volta desse laço é executada.

Na linha 8, é escolhido o elemento de V’ = {v2} que possui a 1 2


v1
6
menor distância dt, nesse caso, v2, que é removido de V’, na linha
9, portanto, V’ = Ø. Na linha 10 busca-se e varre-se todos os vérti- 0 0
ces adjacentes a v2, nesse caso, {v1, v3, v4}. 8
3
Para v1, checa-se se dt[v2] (que é 9), acrescido do custo da ares-
ta (v2, v1) (que é 10), é menor que dt[v1] (que é 0). Como não é v3 v5
menor, não é feita qualquer atualização, e o grafo e as estruturas
são mantidos da mesma forma. O laço retorna para processar o V1 8 V1 3
Fonte: Elaborada pelo autor.
próximo vértice adjacente a v2.

Para v3, verifica-se se dt[v2] (que é 9), acrescido do custo da aresta (v2, v3) (que é
1), é menor que dt[v3] (que é 8). Como não é menor, não é feita qualquer atualiza-
ção, e o grafo e as estruturas são mantidos da mesma forma. O laço retorna para
processar o próximo vértice adjacente a v2.

Para v4, checa-se se dt[v2] (que é 9), acrescido do custo da aresta (v2, v4) (que é
5), é menor que dt[v4] (que é 5). Como não é menor, não é feita qualquer atualiza-

Caminho mínimo e árvores geradoras 69


ção, e o grafo e as estruturas são mantidos da mesma forma. O laço retorna para
processar o próximo vértice adjacente a v2.

Como não há mais vértices adjacentes a v2, o laço das linhas 10 a 15 termina e o
processo retorna ao laço da linha 7. Como o conjunto V’ é vazio, o procedimento e
as estruturas de rótulos e distâncias ficam como na Figura 27.

Percebe-se que as distâncias mínimas entre v1 e cada um dos vértices são dadas
de maneira direta pela estrutura dt. Já o caminho mínimo precisa ser calculado
caminhando-se entre os rótulos, iniciando do vértice destino.

Por exemplo, para calcular o caminho mínimo entre v1 e v4, verifica-se o rótulo
rot[v4], que possui v5. Isso indica que o caminho partindo de v1 passa por v5 para
chegar em v4, isto é, a aresta (v5, v4) faz parte do caminho.

Analisando v5, percebe-se que seu rótulo rot[v5] possui v1. Significa que o cami-
nho passa por v1, isto é, a aresta (v1, v5) faz parte do caminho. Como se chegou em
v1 (vértice origem), não há mais o que calcular, portanto, o caminho entre v1 e v4 é
dado por: {(v1, v5), (v5, v4)}.

Efetuando-se todos os cálculos, as distâncias mínimas entre v1 e os demais vér-


tices do grafo, bem como os caminhos mínimos, são:
• De v1 para v2 : distância 9, caminho {(v1, v3), (v3, v2)}
• De v1 para v3 : distância 8, caminho {(v1, v3)}
• De v1 para v4 : distância 5, caminho {(v1, v5), (v5, v4)}
• De v1 para v5 : distância 3, caminho {(v1, v5)}

Assim, percebe-se que o algoritmo de Dijkstra varre o grafo todo desde de um


vértice inicial e dá como resultado a distância e o caminho entre o vértice inicial es-
colhido e cada um dos vértices do grafo. Para encontrar o caminho entre um vértice
qualquer e o vértice inicial, basta caminhar pelos rótulos em sequência.

Para digrafos (grafos direcionados), o algoritmo é o mesmo, bastando respeitar as


orientações das arestas ao retornar a lista de vértices adjacentes, linha 10 do Algoritmo 6.

Uma melhoria no algoritmo de Dijkstra apresentado é na linha 10. Nesse pon-


to, o algoritmo retorna todos os vértices adjacentes a v, mas pode-se melhorá-lo
para que sejam considerados somente vértices que ainda não foram analisados,
isto é, aqueles pertencentes a V’

CONSIDERAÇÕES FINAIS
Muitos problemas em grafos, bem como problemas reais mapeados para grafos,
são essencialmente resolvidos pela aplicação de algoritmos de busca ou adaptações.
Assim, estes representam um papel importante no entendimento e nas aplicações da
teoria de grafos.
Para grafos não ponderados, foi apresentado que a busca em largura é capaz de en-
contrar o caminho mínimo entre dois vértices, levando em consideração que o tamanho
ou o custo de um caminho não ponderado é dado em número de arestas. Para grafos
ponderados, o tamanho ou o custo de um caminho é gerado pela soma dos custos de
suas arestas, assim, faz-se necessário o uso do algoritmo de Dijkstra, o qual calcula o

70 Teoria dos Grafos


custo dos caminhos entre um vértice inicial e todos os demais vértices do grafo. Vale
ressaltar que o algoritmo de Dijkstra exige a positividade dos custos das arestas.
Já no caso de grafos em que o custo das arestas pode ser negativo, deve-se aplicar
o algoritmo de Bellman-Ford. E para encontrar o caminho mínimo entre todos os pa-
res de vértices de um grafo, utiliza-se o algoritmo de Floyd-Warshall.
Outro problema apresentado foi o de encontrar a árvore geradora mínima em
grafos conexos e ponderados, também usada em vários problemas em grafos. Uma
árvore geradora é uma árvore formada por todos os vértices do grafo, de modo que
o custo da árvore é a soma dos custos individuais de suas arestas. Para tanto, foram
apresentados os algoritmos clássicos de Prim e Kruskal.

ATIVIDADES
1. Considere o grafo a seguir.

v1
Aplique o algoritmo de busca em profundidade,
iniciando em v1. Dê a árvore de busca em
profundidade resultante.
v6 v2
Restrição: para efeito de escolha de vértices
a serem analisados, assuma que os vértices
do grafo estão ordenados e que você sempre
escolhe o qual tem índice menor. Por exemplo,
se em um ponto de escolha há os vértices v6 e
v5 v3 v3, você deve selecionar, primeiramente, o v3.

v4

2. Observe o grafo a seguir.

v1
Aplique o algoritmo de busca em largura,
iniciando em v1. Dê a árvore de busca em lar-
gura resultante.
v6 v2
Restrição: para efeito de escolha dos
vértices a serem analisados, assuma que os
vértices do grafo estão ordenados e que você
sempre escolhe o qual tem índice menor. Por
exemplo, se em um ponto de escolha há os
v5 v3 vértices v6 e v3, você deve selecionar, primei-
ramente, o v3.

v4

Caminho mínimo e árvores geradoras 71


3. Dado o grafo a seguir, aplique o algoritmo de Prim, iniciando em v1, e encontre a
árvore geradora mínima.
v1

3 4

v6 2 v2

5 4
3

v5 v3
10
1
v4

4. Dado o grafo a seguir, aplique o algoritmo de Kruskal, iniciando em v1, e encontre a


árvore geradora mínima.
v1

3 4

v6 2 v2

5 4
3

v5 v3
10
1
v4

5. Dado o grafo a seguir, aplique o algoritmo de Dijkstra e encontre todos os rótulos


e todas as distâncias, partindo do vértice v1.
v1

3 4

v6 2 v2

5 4
3

v5 v3
10
1
v4

72 Teoria dos Grafos


REFERÊNCIAS
BARROSO, M. M. de A. Aplicação de grafos em um problema de rede. Abakós, v. 2, n. 2, p. 48-78, 30
maio 2014. Disponível em: http://periodicos.pucminas.br/index.php/abakos/article/view/P.2316-
9451.2014v2n2p48. Acesso em: 29 maio 2020.
FEOFILOFF, P. Algoritmos para Grafos via Sedgewick, 2020. Página inicial. Disponível em: https://www.ime.
usp.br/~pf/algoritmos_para_grafos/. Acesso em: 29 maio 2020.
FLOYD, R. W. Algorithm 97: Shortest path. Communications of the ACM, v. 5, n. 6, p. 345, jun. 1962. Disponível
em: https://dl.acm.org/doi/10.1145/367766.368168. Acesso em: 29 maio 2020.
FREDMAN, M. L.; TARJAN, R. E. Fibonacci heaps and their uses in improved network optimisation
algorithms. Journal of the ACM, v. 34, n. 3, p. 596-615, jul. 1987. Disponível em: https://dl.acm.org/
doi/10.1145/28869.28874. Acesso em: 29 maio 2020.
GOLDBARG, M. C.; GOLDBARG, E. Grafos: conceitos, algoritmos e aplicações. 1. ed. Rio de Janeiro: Elsevier,
2012.
JOHNSON, D. B. Priority queues with update and finding minimum spanning trees. Information Processing
Letters, v. 4, n. 3, p. 53-57, dez. 1975. Disponível em: https://www.sciencedirect.com/science/article/abs/
pii/0020019075900010. Acesso: 29 maio 2020.
KRUSKAL, J. B. On the shortest spanning subtree of a graph and the traveling salesman problem.
Proceedings of the American Mathematical Society, v. 7, n. 1, p. 48-50, fev. 1956. Disponível em: https://www.
jstor.org/stable/2033241?seq=1. Acesso em: 29 maio 2020.
PRIM, R. C. Shortest connection networks and some generalizations. The Bell System Technical Journal,
v. 36, n. 6, p. 1389-1401, nov. 1957. Disponível em: https://ieeexplore.ieee.org/document/6773228. Acesso
em: 29 maio 2020.
SZWARCFITER, J. L. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.

Caminho mínimo e árvores geradoras 73


4
Grafos eulerianos e hamiltonianos
Este capítulo trata de grafos que têm certas características específicas:
os eulerianos e os hamiltonianos. São apresentados teoremas que carac-
terizam esses grafos, algumas aplicações e alguns algoritmos.
Para tanto, o estudo está organizado do seguinte modo: na Seção 4.1
são abordados os conceitos que definem quando um grafo é euleriano, os
teoremas que apresentam condições necessárias e suficientes, e os algo-
ritmos para a construção de um caminho euleriano. Já na Seção 4.2 estão
descritas as condições para que um grafo seja hamiltoniano, bem como os
teoremas que colocam as condições suficientes (mas não necessárias) e a
discussão de algoritmos para encontrar um caminho hamiltoniano.

4.1 Grafos eulerianos


Vídeo Os grafos eulerianos possuem esse nome graças a Leonhard Euler (1707–1783),
que, em 1736, resolveu o famoso problema das sete pontes de Königsberg, dando
origem à teoria dos grafos (SZWACFITER, 2018). O enigma se passa na cidade de
Kaliningrado, que, à época, era conhecida como Königsberg. A cidade é cortada
pelo Rio Prególia e possuía sete pontes (Figura 1), das quais duas foram destruídas
por bombardeios na Segunda Guerra Mundial.

Sergey Merkulov/Shutterstock
Figura 1
As pontes de Königsberg.
As marcações em ver-
melho indicam as pontes
destruídas na Segunda
Guerra Mundial.

74 Teoria dos Grafos


Na época, havia uma discussão se era possível atravessar todas as pontes, ini-
ciando e retornando na mesma margem, sem repetir qualquer uma delas. Em 1736,
Euler provou que não era possível e, para isso, mapeou o problema com pontos e
linhas ligando-os, conforme a Figura 2. Por esse diagrama,
indicou as condições necessárias e suficientes para que fos- Figura 2
Grafo do problema das 7
se possível atravessar todas as pontes somente uma vez, pontes de Königsberg
iniciando e terminando na mesma margem, e destacou que
as pontes de Königsberg não possuíam tais condições. As- v1
sim, surgiu a teoria dos grafos.

Como mencionado, ao longo desta seção serão apre-


sentadas as condições necessárias e suficientes para que
um grafo seja euleriano, bem como a discussão dos teo-
remas e algoritmos envolvidos para a construção de ciclos
eulerianos.
v2 v4
Dado um grafo não dirigido e conexo G = (V, A), um ca-
minho euleriano é um caminho que passa por todas as
arestas do grafo somente uma vez. Ou seja, é uma sequên-
cia de vértices, v1, v2, ..., vk, tal que vi ∈ V e (vi, vi+1) ∈ A, para
todo i, 1 ≤ i ≤ k, de modo que todas as arestas (vi, vi+1) do
grafo estão presentes nesse caminho somente uma vez.

Considere o grafo G = (V, A) da Figura 3 e o mesmo grafo v3


G com arestas rotuladas da Figura 4.
Fonte: Elaborada pelo autor.

Figura 3
Grafo com caminho euleriano

v3

v2

v4

v6

v1

v7 v5

Fonte: Elaborada pelo autor.

Grafos eulerianos e hamiltonianos 75


Figura 4
Grafo com arestas rotuladas e caminho euleriano

v3
a8
v2
a7
a3

v4
a1
a4
v6
a2

v1 a6
a5

v7 v5

Fonte: Elaborada pelo autor.

Na Figura 4, o grafo não dirigido G = (V, A) pode ser descrito por meio de seus
componentes:
• Vértices: V = {v1, v2, v3, v4, v5, v6, v7}
• Arestas: A = {(v1, v2), (v2, v3), (v3, v4), (v4, v5), (v4, v2), (v4, v6), (v6, v7), (v7, v2)}
• Arestas nomeadas:

a1 = (v1, v2)
a2 = (v7, v2)
a3 = (v4, v2)
a4 = (v4, v6)
a5 = (v6, v7)
a6 = (v4, v5)
a7 = (v3, v4)
a8 = (v2, v3)

Dado o caminho {v1, v2, v3, v4, v2, v7, v6, v4, v5}, é possível passar por todas as
arestas somente uma vez na seguinte ordem: a1, a8, a7, a3, a2, a5, a4, a6. Portanto,
diz-se que o grafo G possui um caminho euleriano. Se este for um ciclo, isto é,
começar e terminar no mesmo vértice, é chamado de ciclo euleriano.

Considere o grafo G = (V, A) apresentado na Figura 5, contendo arestas rotuladas.

76 Teoria dos Grafos


Figura 5
Grafo com arestas rotuladas e ciclo euleriano

v5 a6 v4

a10 a4 a7

v7 a5 v6 v3

a3

a8
a9 a2

v1 a1 v2

Fonte: Elaborada pelo autor.

O grafo G (Figura 5) pode, também, ser descrito por meio de seus elementos:
• Vértices: V = {v1, v2, v3, v4, v5, v6, v7}
• Arestas: A = {(v1, v2), (v2, v3), (v3, v4), (v4, v5), (v4, v2), (v4, v6), (v6, v7), (v7, v2), (v1, v7),
(v7, v5)}
• Arestas nomeadas:

• a1 = (v1, v2)
• a2 = (v7, v2)
• a3 = (v4, v2)
• a4 = (v4, v6)
• a5 = (v6, v7)
• a6 = (v4, v5)
• a7 = (v3, v4)
• a8 = (v2, v3)
• a9 = (v1, v7)
• a10 = (v7, v5)
Dado o caminho {v7, v5, v4, v6, v7, v2, v4, v3, v8, v1, v7}, percebe-se que é possível
passar por todas as arestas do grafo, somente uma vez, a saber: a10, a6, a4, a5, a2, a3,
a7, a8, a1, a9. Portanto, trata-se de um caminho euleriano. Também vê-se que esse
caminho é um ciclo e que, desse modo, o grafo contém um ciclo euleriano.

Denomina-se grafo euleriano um grafo que possui um ciclo euleriano. Assim,


pode-se dizer que o grafo da Figura 5 é euleriano.

Se um grafo possui um caminho euleriano, mas não um ciclo euleriano, então,


é dito semieuleriano. Para que um grafo semieuleriano se torne euleriano, deve-se
inserir uma aresta entre o vértice de origem e o de término do caminho euleriano

Grafos eulerianos e hamiltonianos 77


(NICOLETTI; HRUSCHKA JUNIOR, 2018). O grafo da Figura 3, por exemplo, é um gra-
fo semieuleriano. Adicionando-se a aresta (v1, v5), consegue-se um grafo euleriano,
pois resulta o seguinte ciclo: {v1, v2, v3, v4, v2, v7, v6, v4, v5, v1}, que é um ciclo euleriano.
A Figura 6, por sua vez, apresenta o mesmo grafo com a aresta inserida (represen-
tada pela linha tracejada para facilitar a visualização).
Figura 6
Grafo semieuleriano com aresta inserida

v3

v2

v4

v6

v1

v7 v5

Fonte: Elaborada pelo autor.

Convém ressaltar que um grafo desconexo não pode ser euleriano, pois não há
a possibilidade de se conseguir um ciclo euleriano, isto é, passando por todas as
arestas, visto que parte do grafo está desconectada.

Observe a seguir dois teoremas importantes que caracterizam os grafos


eulerianos.

Teorema 1

Seja o grafo G = (V, A), tal que o grau de todos os vértices é, pelo menos, dois,
então, G contém um ciclo.

Prova: se o grafo G não for simples, ou seja, possuir laços (arestas incidindo no
mesmo vértice) ou arestas paralelas (arestas distintas incidindo sobre os mesmos
vértices), claramente G tem um ciclo, pois um laço é um ciclo de comprimento 1, e
duas arestas paralelas formam um ciclo de tamanho 2.

Se o grafo G for simples, assume-se um vértice qualquer de G, v0, tomado como


ponto de partida. Assim, como grau(v0) ≥ 2, consegue-se escolher uma aresta, a1,
que incide em outro vértice diferente de v0 (caso fosse obrigatório voltar a v0, o gra-
fo não seria simples). Como grau(v1) deve ser maior ou igual a 2, seleciona-se outra
aresta, a2, que incide em outro vértice diferente de v1, por exemplo, v2. O processo

78 Teoria dos Grafos


continua até que seja escolhida uma aresta ei, que incida nos vértices vi-1 e vi, de
modo que vi-1 ≠ vi. Como G tem um número finito de vértices, eventualmente será
necessário escolher uma aresta que incida sobre um vértice, chamado de vk, o qual
já foi escolhido. Assim, se o vértice vk foi escolhido duas vezes, o caminho entre sua
primeira escolha até a sua segunda escolha é um ciclo, pois os vértices pertencen-
tes são distintos: o caminho inicia em vk e termina em vk.

Já o Teorema 2 caracteriza os grafos eulerianos pelo grau de seus vértices. Esse


teorema apresenta a condição necessária e suficiente para que um grafo seja eu-
leriano. A prova da ida foi dada por Euler (1736) e a da volta por Hierholzer (1873)
(BOAVENTURA NETTO, 2003).

Teorema 2

Seja o grafo conexo G = (V, A). G é um grafo euleriano se, e somente se, o grau
de todo vértice de G for par.

Prova de ida →: se o grafo G é euleriano, o grau de todo vértice de G é par.

Considere que o grafo G é euleriano, portanto, possui um ciclo que passa por
todas as arestas de G somente uma vez. Caminhando pelo ciclo euleriano, ao pas-
sar por um vértice qualquer, deve-se ter duas arestas incidentes, uma para chegar
ao vértice e outra para sair do vértice. Sendo assim, o grau de todo vértice do ciclo
é par e o grau de todo vértice de G é par.

Prova de volta ←: se o grau de todo vértice de G é par, então, G é euleriano.

Essa demonstração será feita pela indução no número de arestas a = |A(G)|.


Considere que o grau de todo vértice de G é par.

Base da indução: o teorema é verdade para o grafo com número de arestas


igual a zero (a = 0), pois G é conexo, tem somente um vértice.

Passo indutivo: assuma que a > 1 (o grafo possui mais de uma aresta) e que
o teorema é válido para todo grafo com número de arestas menor que a. Isto
é, se o grafo possui vértices com grau par e menos do que a arestas, então, é
euleriano.

Hipótese de indução: o teorema é válido para todo grafo com número de ares-
tas menor que a. Se um grafo possui menos que a arestas e o grau de todos os seus
vértices é par, é euleriano.

Como G é conexo e o grau de seus vértices é par, estes devem possuir grau
maior que 2. Como a quantidade de arestas de G é a > 1, o número de vértices
de G, V(G) é maior ou igual a 2. Assim, pelo Teorema 1, o grafo possui um ciclo
C = {v1, v2, ..., vk, v1}.

Considere G’ o grafo resultante da retirada das arestas participantes do ciclo C,


ou seja, G’ = (V, A \ A(C)). Como cada vértice em C participa do ciclo com um vértice
de entrada e outro de saída, a retirada das arestas pertencentes a C, para gerar

Grafos eulerianos e hamiltonianos 79


o grafo G’, remove graus dos vértices aos pares, mantendo a propriedade de que
todos os vértices têm grau par.

Assim, as componentes conexas de G’ contêm somente vértices com grau par.


Sejam G’1, G’2, ..., G’l as componentes conexas não triviais (que possuem mais de um
vértice e mais de uma aresta) de G’, claramente |A(G’i)| < a, tal que i = 1, 2, ..., l. Isto
é, a quantidade de arestas nessas componentes conexas é menor que a quantida-
de de arestas do grafo G.

Assim, pela hipótese de indução, cada G’i, tal que i = 1, 2, ..., l, possui um ciclo
euleriano, denotado aqui como Ti.

Como G é conexo, pelo menos um vértice de cada componente conexa de G’


está presente em C, isto é, V(C) ∩ V(G’i) ≠ ∅. Tome v’i como sendo o vértice mais à es-
querda da sequência de vértices de C, tal que vi ∈ V(C) ∩ V(G’i). Sendo assim, v’i está
presente em C e na componente conexa G’i. Dado o ciclo C, consegue-se separá-lo
nos seguintes componentes:
• C1 = {v1, ..., v’l-1}
• Ci = {v’i+1, ..., v’r-1}
• Cl+1 = {v’l+1, ..., v1}

Essa separação indica exatamente os vértices compartilhados entre C e as com-


ponentes conexas, apontando, dentro de C, a sua localização. Para 2 ≤ i ≤ l, tem-se
o ciclo C = {C1, v’1, C2, v’2, C3..., Cl, v’l, Cl+1}. Assim, no ciclo C, em cada aparição de um
vértice compartilhado com uma componente conexa, basta adicionar o ciclo eule-
riano desta componente, a saber, {C1, T1, C2, T2, C3, ..., Cl, Tl, Cl+1}, resultando em um
ciclo euleriano.

Saiba mais
Indução é uma técnica de prova muito usada em ciência da computação e matemática discreta, útil
quando se quer demonstrar afirmações para um conjunto infinito de proposições.
Existem dois tipos. O primeiro princípio de indução se baseia na prova de duas proposições,
assumindo uma propriedade P e provando que P(n) é verdade para todo n inteiro positivo. Deve-se
provar:

1. P(1) é verdade
2. ∀k P(k) → P(k+1)

A proposição 1 é chamada de base da indução ou passo básico. Ela garante o ponto de partida,
provando o caso inicial. A proposição 2 é denominada de passo indutivo. Assume-se que P(k) seja
verdadeiro, o que é conhecido como hipótese de indução; então, prova-se que, dadas essas condi-
ções, P(k+1) é verdadeiro.
O segundo princípio de indução também baseia-se na prova de duas proposições, com algumas
alterações, a saber:

1. P(1) é verdade
2. ∀k P(r) é verdade para todo r, 1 ≤ r ≤ k → P(k+1)

A diferença recai sobre a proposição 2, que, no primeiro princípio, para provar P(k+1), assume-se
somente P(k) como verdade; já no segundo princípio, para provar P(k+1), admite-se que todos os
P(r), entre 1 e k, são verdadeiros.

Para encontrar um ciclo euleriano em um grafo, são mostrados aqui dois algo-
ritmos: o de Hierholzer e o de Fleury. Ambos assumem que o grafo de entrada é
euleriano e retornam o ciclo partindo de algum vértice.

80 Teoria dos Grafos


O algoritmo de Hierholzer, de 1873, foi um dos primeiros a ser proposto, po-
dendo ser visto no Algoritmo 1 a seguir. Seu princípio básico de funcionamento é
iniciar o processamento partindo-se de vértices. Assim que um vértice é escolhido,
encontra-se um pequeno ciclo, com arestas aleatórias, o qual será agregado ao
ciclo euleriano final. O ciclo formado por todos os pequenos ciclos adicionados é o
resultado a ser retornado pelo algoritmo.

Algoritmo 1
Algoritmo de Hierholzer

Algoritmo: Constrói um Ciclo Euleriano


Dados: Grafo G = (V, A) euleriano
1 Escolha um vértice v qualquer de G
2 Faça G’= (V’, A’), tal que V’ = V e A’ = A
3 Faça C = {v}
4 ENQUANTO A’   FAÇA
5 Escolha v’  C, tal que grau(v’) > 0 em G’
6 C’ <- Um ciclo em G’ iniciando e terminando em v’, percorrendo
arestas aleatórias
7 G’ <- ( V’, A’ \ A(C’) )
8 Substituir em C o vértice v’ pelo ciclo C’
9 FIM ENQUANTO
10 Retorne C
Fonte: Adaptado de Goldbarg e Goldbarg, 2012.

Dado um grafo euleriano G = (V, A), o processo inicia escolhendo-se um vértice


aleatório de G e adicionando-o a C, que conterá um ciclo euleriano ao final. Tam-
bém é construído um grafo auxiliar G’, o qual será usado para controlar as arestas
já inseridas em C. G’ e é chamado de grafo reduzido induzido, pois é construído após
a retirada de arestas já escolhidas de G.

Na linha 5, o condicional indica que o laço será executado enquanto houver


arestas em G’ a serem consideradas. Na linha 6 escolhe-se um vértice qualquer, v’
de C, que ainda possua arestas incidentes em G’, pois com base neste será construí-
do um pequeno ciclo em G’.

Na linha 6, partindo-se de v’, escolhido anteriormente, retorna-se um ciclo C’


no grafo G’, começando e terminando em v’ e percorrendo quaisquer arestas de
maneira aleatória, mas que formem um ciclo.

Dado o ciclo C’ previamente encontrado, retira-se todas as arestas perten-


centes a C’ do grafo auxiliar G’. Na linha 8 substitui-se, no conjunto C, o vértice
v’ pelo ciclo C’.

O algoritmo de Fleury retorna um ciclo euleriano em um grafo euleriano, ou


um caminho euleriano em grafos que possuem, no máximo, dois vértices com
grau ímpar.

Seja o grafo G dado como entrada no algoritmo de Fleury, para controlar as


arestas já consideradas, usa-se a marcação de aresta, que basicamente é a reti-
rada das arestas de G. Estas formam um grafo reduzido induzido.

Grafos eulerianos e hamiltonianos 81


O Algoritmo 2 usa a regra da ponte. Considerando o grafo reduzido induzido,
formado pelas arestas que ainda não foram marcadas, escolhe-se uma aresta (v, w)
que não seja ponte nesse grafo. Se ela não existir, isto é, se só tiver arestas que
são pontes, então, deve ser escolhida, pois não há alternativa. Em suma, deve-se
escolher as arestas de modo que a parte do grafo que resta percorrer não fique
desconexa.

Algoritmo 2
Algoritmo de Fleury
Algoritmo: Constrói um Ciclo Euleriano
Dados: Grafo G = (V, A) euleriano
1 Escolha um vértice v qualquer de V
2 Faça C = {v}
3 REPITA
4 Escolha uma aresta (v, w) não marcada usando a regra da ponte
5 Atravesse (v, w)
6 C <- C  {w}
7 Marcar a aresta (v, w)
8 v <- w
9 ATÉ QUE Todas as arestas estejam marcadas
10 C <- C  {v}
11 Retorne C
Fonte: Adaptado de Goldbarg e Goldbarg, 2012.

O algoritmo começa com a escolha aleatória de um vértice do grafo, o qual é


incluído em C (linha 2), que conterá o ciclo euleriano.

Na linha 4 escolhe-se uma aresta não marcada, usando a regra da ponte, isto
é, seleciona-se uma aresta que não seja ponte no grafo formado pelas arestas não
marcadas. Na linha 6, o vértice no qual a aresta escolhida incide é adicionado a C, e
a aresta é marcada na linha 7 para que não seja considerada. A linha 8 garante que
o processo continue a partir do vértice adjacente à aresta escolhida. O algoritmo se
repete até que todas as arestas tenham sido marcadas.

Os conceitos se aplicam também a digrafos. Se um caminho orientado, em um di-


grafo, contém todas as arestas do grafo somente uma vez, é chamado de caminho
euleriano. Se esse caminho for um ciclo orientado, é conhecido como ciclo euleriano.
Um digrafo que contém um ciclo euleriano é chamado de digrafo euleriano.

Para verificar se um digrafo é euleriano, há uma condição necessária e suficien-


te. Um digrafo D = {V, A} é euleriano se, e somente se, for unilateralmente conexo
e se, para todo vértice vi ∈ V, o grau de entrada de vi (denotado como grau+(vi) ou
o número de vértices que chegam em vi) for igual ao grau de saída de vi (denotado
como grau- (vi) ou o número de vértices que saem de vi).

Por exemplo, o digrafo da Figura 7 é euleriano, pois é unilateralmente conexo –


para cada par de vértices há um caminho orientado entre eles em algum sentido –,

82 Teoria dos Grafos


e, para cada vértice, o número de vértices que entram (grau de entrada) é igual ao
número de vértices que saem (grau de saída).

No digrafo da Figura 7, um ciclo euleriano é: (v6, v4), (v4, v2), (v2, Figura 7
v3), (v3, v4), (v4, v5), (v5, v3), (v3, v1), (v1, v5), (v5, v2), (v2, v6). Digrafo Euleriano

Um teorema similar existe para verificar se o digrafo possui v1 v5


um caminho euleriano (não um ciclo). Um digrafo D = (V, A) pos-
sui um caminho euleriano se, e somente se, for unilateralmente
conexo e se contar com as seguintes condições:
• Dois de seus vértices e vi e vj forem:

o grau de entrada de vi é igual ao grau de saída


mais um, isto é, grau+(vi) = 1 + grau–(vi);
v2 v3
o grau de saída de vj é igual ao grau de entrada
mais um, isto é, grau–(vj) = 1 + grau+(vj).
• Para todos os demais vértices, seus graus de
entrada e saída devem ser iguais, isto é, ∀v ∈ V,
grau–(v) = grau+(v).

Com essas condições, o caminho euleriano inicia em vj (o vér-


tice com mais arestas de saída do que de entrada) e termina em v6 v4
vi (o vértice com mais arestas de entrada do que de saída).
Fonte: Elaborada pelo autor.
Como exemplo, pode-se analisar o digrafo da Figura 8, que é
unilateralmente conexo e os graus dos seus vértices:
Figura 8
• Vértice v1: grau+(v1) = 1 e grau–(v1) = 2 Digrafo com caminho euleriano
• Vértice v2: grau (v2) = 3 e grau (v2) = 2
+ –
v1 v5
• Vértice v3: grau (v3) = 2 e grau (v3) = 2
+ –

• Vértice v4: grau+(v4) = 2 e grau–(v4) = 2


• Vértice v5: grau+(v5) = 2 e grau–(v5) = 2
• Vértice v6: grau+(v6) = 1 e grau–(v6) = 1

Claramente, percebe-se que o grau de entrada de v2 é o grau


de saída mais um e que o grau de saída de v1 é o grau de entra- v2 v3
da mais um. Todos os demais vértices possuem grau de entrada
igual ao grau de saída. Assim, esse digrafo (Figura 8) conta com
um caminho euleriano que inicia exatamente em v1 e que termi-
na em v2. Um caminho euleriano, nesse digrafo, é: (v1, v5), (v5, v3),
(v3, v4), (v4, v5), (v5, v2), (v2, v6), (v6, v4), (v4, v2), (v2, v3), (v3, v1), (v1, v2).

Um problema clássico de grafos eulerianos é o Problema do


Carteiro Chinês, do inglês, Chinese Postman Problem (CPP). Elabo- v6 v4
rado pelo matemático chinês Mei-Ku Kwan, em 1962, o dilema é
Fonte: Elaborada pelo autor.
enunciado assumindo que um carteiro precisa entregar suas car-

Grafos eulerianos e hamiltonianos 83


tas e que, para isso, deve passar por todas as ruas do bairro fazendo um caminho
mínimo. Nessa tarefa, o entregador não pode repetir vias e deve começar e terminar
no mesmo ponto de distribuição (GOMES et al., 2009).

Quando essa questão é mapeada para grafos, cada rua é representada por
uma aresta e os vértices são as esquinas do bairro. Se o grafo é euleriano, isto
é, possui um ciclo que passa por todas as arestas ou ruas sem repetir nenhuma
delas, a solução é simplesmente encontrar esse ciclo. Para detectar rapidamente
se o grafo é euleriano, pode-se usar o Teorema 2, o qual demonstra que o grau
de todos os vértices de um grafo euleriano é par. Podem ser aplicados, ainda, os
algoritmos de Hierholzer ou Fleury. Aqui estão sendo desconsiderados os pesos
das arestas, não gerando um grafo ponderado, para facilitar a compreensão.
Saiba mais
Se o grafo não for euleriano, existirão arestas com grau ímpar. Convém ressaltar
O Lema do Aperto de Mão
(Handshaking Lemma) indica que que o número de vértices de grau ímpar é par, conforme o Lema do Aperto de Mão.
a soma dos graus dos vértices, em
Caso seja necessário repetir ruas, pode-se adicionar as que não fazem parte da
um grafo não orientado, é duas
vezes a quantidade de arestas. área de cobertura para que o caminho mais curto seja encontrado.
Como consequência, o número de
vértices com grau ímpar é sempre Como pode ser observado, os grafos eulerianos possuem uma caracterização
par. Esse resultado foi provado matemática clara, teoremas que apresentam as condições necessárias e suficien-
por Euler no ano de 1736 (SILVA, tes para determinar se um grafo é euleriano, bem como algoritmos definidos para
2009).
encontrar um ciclo euleriano.

4.2 Grafos hamiltonianos


Vídeo
A origem dos grafos hamiltonianos se deu com o matemático britânico Thomas
Pennington Kirkman (1806–1895), que em 1856 debruçou-se sobre problemas
de enumeração combinatória em poliedros para buscar, mais especificamen-
te, condições para que ciclos sem repetição de arestas ou vértices fossem en-
contrados em poliedros. Antes mesmo de William Rowan Hamilton (1805-1865),
Kirkman apresentou um exemplo de poliedro contendo um ciclo iniciado em um
vértice, passando por todos os vértices sem repetição e retornando à origem
(GOLDBARG; GOLDBARG, 2012).

Em 1857, Hamilton propôs um jogo chamado Icosiano (ou viagem à volta do


mundo) cujo objetivo era encontrar caminhos e ciclos em um dodecaedro (poliedro
de 12 faces), conforme Figura 9.

84 Teoria dos Grafos


Figura 9
Grafo de representação do jogo icosiano

Fonte: Elaborada pelo autor.

Uma solução para o jogo pode ser vista na Figura 10.

Figura 10
Solução para o jogo icosiano

Fonte: Elaborada pelo autor.

Grafos eulerianos e hamiltonianos 85


O ciclo hamiltoniano de representação da solução do jogo pode ser visto na
Figura 11.

Figura 11
Ciclo hamiltoniano para a
solução do jogo icosiano

Fonte: Elaborada pelo autor.

Apesar de ter sido estudado em 1856, o problema de ciclos hamiltonianos foi


amplamente difundido em 1934 por Hassler Whitney (1907–1989) e
Karl Menger (1902–1985) com a publicação de um trabalho na Universidade de
Princeton (FERNANDO et al., 2019).

Dado um grafo G = (V, A), em que o caminho contenha todos os


Figura 12 vértices de G, sendo que cada um aparece somente uma vez, tem-
Grafo com caminho hamiltoniano
-se um caminho hamiltoniano. No grafo da Figura 12, o caminho
v3
{(v1, v2), (v2, v3), (v3, v4)} contém todos os vértices do grafo somente
v2 uma vez, portanto, é um caminho hamiltoniano.

Considere um ciclo sobre G contendo os seguintes vértices:


v1, v2, v3, ..., vk, v1. Se o caminho v1, v2, v3, ..., vk for hamiltoniano,
tem-se um ciclo hamiltoniano. Um grafo que contém um ciclo
hamiltoniano é chamado de grafo hamiltoniano.
v4
Ao se analisar o grafo da Figura 13 a seguir, percebe-se que
o caminho (v2, v3), (v3, v5), (v5, v1), (v1, v4) passa por todos os vérti-
ces exatamente uma vez e que, portanto, trata-se de um cami-
v1
nho hamiltoniano. No mesmo grafo, o caminho (v2, v3), (v3, v5),
Fonte: Elaborada pelo autor. (v5, v1), (v1, v4), (v4, v2) é um ciclo (começa e termina em v2), sendo
caracterizado, desse modo, como um ciclo hamiltoniano. Em ra-
zão disso, o grafo é hamiltoniano.

86 Teoria dos Grafos


Se um grafo contém um caminho hamiltoniano, mas não Figura 13
um ciclo hamiltoniano, é chamado de grafo semi-hamiltoniano. Grafo hamiltoniano

Percebe-se que para um grafo semi-hamiltoniano se tornar v2


hamiltoniano, basta adicionar uma aresta entre o vértice iní-
cio e o vértice final do caminho.

Considere novamente o grafo da Figura 12, o qual contém


o caminho hamiltoniano {(v1, v2), (v2, v3), (v3, v4)} e, portanto, é v1 v4 v3
um grafo semi-hamiltoniano. Para que ele se torne hamilto-
niano, basta adicionar uma aresta entre o início e o final do
caminho, no caso (v4, v1), como pode ser visto na Figura 14 cuja
aresta inserida está tracejada para melhor visualização. v5
Fonte: Elaborada pelo autor.
Como resultado dessa definição, consegue-se perceber
que um grafo completo Kn, sendo n ≥ 3, é sempre hamilto-
niano. Isso ocorre porque, em um grafo completo, todos os n
vértices possuem arestas incidentes em todos os demais n-1 Figura 14
Grafo semi-hamiltoniano com aresta inserida
vértices. Assim, para todo vértice vi, 1 ≤ i ≤ n, existe o seguinte
caminho C = {(v1, v2), (v2, v3), (v3, v4) … (vn-1, vn )}, o qual passa v3
por todos os vértices {v1, …, vn} somente uma vez. Como todos
v2
vértices são adjacentes a todos os demais, o vértice vn tam-
bém é adjacente a v1, assim, o caminho C, adicionando a ares-
ta (vn, v1), é um ciclo que passa por todos os vértices, portanto,
um ciclo hamiltoniano, e o grafo é hamiltoniano.

Para grafos hamiltonianos, não se tem uma condição ne- v4


cessária e suficiente conhecida (isto é, um teorema do tipo
“se, e somente se”), como no caso dos grafos eulerianos. Basi-
camente, os teoremas apresentam condições suficientes para v1
que o grafo seja considerado hamiltoniano, como pode ser Fonte: Elaborada pelo autor.
observado a seguir, no Teorema de Ore (1960).

Teorema 3

Teorema de Ore (1960)

O Teorema de Ore foi provado pelo matemático norueguês


Øystein Ore (1899–1968) e estabelece que um grafo contendo uma quantidade su-
ficiente de arestas é hamiltoniano.

Considere o grafo simples G = (V, A), tal que |V| = n e n ≥ 3. Se para todo par de
vértices não adjacentes de G, vi e vj for observado que grau(vi) + grau(vj) ≥ n, então,
G é hamiltoniano.

A prova se dá por contradição, ou seja, assume-se que o grafo possui as con-


dições apresentadas, mas não é hamiltoniano. Encontrando-se uma contradição,
prova-se que o grafo, necessariamente, é hamiltoniano.

Grafos eulerianos e hamiltonianos 87


Seja o grafo G com as condições apresentadas, mas que não seja hamiltoniano,
supõem-se que seja semi-hamiltoniano, isto é, possui um caminho hamiltoniano, e a
adição de uma aresta entre o vértice inicial e final desse caminho o torna hamiltoniano.
Se o grafo não for semi-hamiltoniano, pode-se adicionar arestas até que seja.

Convém ressaltar que a adição de arestas extras não contradiz a hipótese, pois
são acrescentadas em vértices não adjacentes, os quais já atendem à condição de
que a soma de seus graus é maior que n.

Assim, para tornar um grafo em hamiltoniano, basta adicionar a aresta (v, w),
indicando que há um caminho passando por todos os vértices de G. Assumindo
v = v1 e w = vn, o caminho é: C = {v, v2, v3, ..., vn-1, w}, conforme pode-se ver a seguir.

... ...
v1 v2 vi-1 vi vn-1 vn

A hipótese apresentada – grau(v1) + grau(vn) ≥ n – indica que existe um con-


junto de pelo menos n-2 arestas que incidem em {v1, vn}. Isto é, a aresta (v1, vn)
aumenta em 1 o grau de v1 e o grau de vn, indicando que, para que a soma de
seus graus seja maior que n, n-2 arestas precisam incidir em v1 ou vn. Ademais,
não é possível que todas as n-2 arestas incidam somente em v1 ou vn, pois seria
necessário, no mínimo, um par de arestas paralelas, contradizendo a condição de
que G é simples. Isso é facilmente verificável, pois assume-se todas as n-2 arestas
incidentes somente em v1. Além da aresta que pertence ao caminho C (v1, v2), v2
seria incidente a v1, em uma nova aresta, para que a condição fosse satisfeita,
gerando arestas paralelas.

A figura a seguir mostra essa composição contraditória de arestas. As arestas


mais finas são as n-2 arestas. Percebe-se que a aresta fina (v1, v2) é paralela à aresta
(v1, v2), a qual pertence ao caminho C, contradizendo a condição do teorema. Des-
considerando essa aresta, tem-se n-3 arestas, o que também contradiz a condição
do teorema, pois, nesse caso, grau(v1) + grau(vn) não seria maior ou igual a n.

... ...
v1 v2 vi-1 vi vn-1 vn

88 Teoria dos Grafos


Assumindo as n-2 arestas incidentes em {v1, v2}, consegue-se apontar os vértices
vi e vi-1, tal que vi é adjacente a v1, aresta (vi, v1), e vi-1 é adjacente a vn, aresta (vi-1, vn),
conforme a figura a seguir.

... ...
v1 v2 vi-1 vi vn-1 vn

Posto isso, consegue-se apontar o seguinte ciclo: {v1, v2, ..., vi-1, vn, vn-1, ..., vi+1, vi, v1}. Esse
ciclo é hamiltoniano, portanto, o grafo G é hamiltoniano, contradizendo a suposição.

Teorema 4

Teorema de Dirac (1952)

Outro teorema conhecido é o Teorema de Dirac, provado pelo matemático hún-


garo/britânico Gabriel Andrew Dirac (1925–1984). Ele também dá condições sufi-
cientes para que um grafo seja hamiltoniano com base no grau dos vértices.

Seja o grafo simples G = (V, A), tal que |V| = n e n ≥ 3, se o grau de todo vértice
de G é maior ou igual a n/2, isto é, grau(v) ≥ n , ∀v ∈ V, então, G é hamiltoniano.
2
Prova: se o grau de todos os vértices é maior que n/2, então, para todo par de
vértices de G, adjacentes ou não, vale a regra:

grau(v) + grau(w) ≥ n + n
2 2
Sendo o mesmo que dizer:

grau(v) + grau(w) ≥ n

Assim, pelo Teorema de Ore (Teorema 3), G é hamiltoniano.

As definições de caminho, ciclo e grafo hamiltonianos se aplicam ainda a


digrafos (grafos orientados). Em um digrafo, um caminho orientado é cha-
mado de caminho hamiltoniano se contiver todos os vértices do digrafo, sem
repetição destes. Um ciclo orientado é dito ciclo hamiltoniano se for um ca-
minho hamiltoniano e se iniciar e terminar no mesmo vértice. Já um digrafo
é dito hamiltoniano se contiver um ciclo orientado hamiltoniano. Se contiver
um caminho orientado hamiltoniano, é chamado digrafo semi-hamiltoniano
(NICOLETTI; HRUSCHKA JUNIOR, 2018).

Grafos eulerianos e hamiltonianos 89


Algoritmos para encontrar um ciclo hamiltoniano são complicados. Para um
grafo com n vértices, pode haver n! ciclos hamiltonianos. Ao se pensar em grafos
completos, que são claramente hamiltonianos, Kn para n > 2, tem-se exatamente n!
ciclos hamiltonianos, sendo, portanto, um limite superior da quantidade de ciclos
possíveis.

Um algoritmo de força bruta, para encontrar um ciclo hamiltoniano em um gra-


fo, é inviável, pois, dado um grafo com n vértices, tem-se até n! sequências de vér-

tices que podem ser caminhos hamiltonianos e que devem ser


enumeradas e testadas.

Isso ocorre em grafos completos, como o grafo completo K3, re-


Figura 15 presentado pela Figura 15. Observa-se que ele tem 6 ca-
Grafo completo K3 v2
minhos (3!), a saber:

• {(v1, v2), (v2, v3), (v3, v1)}


• {(v2, v3), (v3, v1), (v1, v2)}
• {(v3, v1), (v1, v2), (v2, v3)}
• {(v1, v3), (v3, v2), (v2, v1)}
v1 v3
• {(v2, v1), (v1, v3), (v3, v2)}
Fonte: Elaborada pelo autor.
• {(v3, v2), (v2, v1), (v1, v3)}

Se for considerado o K4 (grafo completo com quatro


vértices), apresentado na Figura 16, tem-se 24 cami-
Figura 16
Grafo completo K4 nhos (4!), e assim por diante.
v2 v3
Convém ressaltar que quando o problema de en-
contrar ciclos hamiltonianos se inicia em um vértice
específico, tem-se (n-1)! ciclos candidatos. Por exem-
plo, para enumerar todos os ciclos hamiltonianos em
K4, da Figura 16, iniciando em v1 , tem-se (4-1)!, isto é
3! ciclos.

v1 v4
Essa quantidade de valores pode não parecer mui-
Fonte: Elaborada pelo autor.
ta, mas considere um algoritmo ingênuo, que enume-
ra todas as possíveis combinações de ciclos em um grafo com n vértices, resultando
em (n-1)! ciclos candidatos, e que testa se cada candidato é um ciclo hamiltoniano.

Considere, também, que para essa tarefa está disponível um computador com a ca-
pacidade de efetuar 12 trilhões de operações de ponto flutuante por segundo (12*1012),
2
isto é, um computador com 12 teraflops . Para varrer todos os possíveis ciclos de um
12*1012
grafo com 25 vértices, n = 25, a máquina é capaz de avaliar = 500 bilhões de
2 24
ciclos candidatos por segundo. Como ele precisa calcular 24! possíveis ciclos, demorará
Para efeitos de comparação, essa
capacidade de processamento é 24!
≅ 39.348 anos, um tempo complemente inviável.
alcançada por alguns consoles de (500 bilhões)
videogame, lançados em 2020,
que possuem hardware dedicado
ao processamento de vídeo.

90 Teoria dos Grafos


Um dos problemas mais famosos envolvendo grafos hamiltonianos é o Problema
do Caixeiro Viajante, do inglês Traveling Salesman Problem.

O dilema é enunciado como uma pessoa que precisa visitar várias cidades para
efetuar as suas vendas. Conectando as cidades, tem-se estradas ou rodovias, aos
pares, sendo que cada uma conta com uma distância (um peso). O objetivo é visitar
todos os distritos somente uma vez, fazendo o percurso mais curto e retornando à
cidade de origem.

Representar essa questão na teoria dos grafos é simples. Cada cidade é um vér-
tice e cada rodovia uma aresta ponderada com sua distância. Se houver estradas
entre todas as cidades, o grafo é completo. Assumindo que o custo de um caminho/
ciclo é a soma dos pesos de suas arestas, a solução do problema é encontrar um
ciclo hamiltoniano que tenha a menor despesa.

Por exemplo, considerando quatro cidades do estado de Santa Catarina:


Joaçaba, Treze Tílias, Videira e Campos Novos, a representação em forma de grafo
pode ser vista na Figura 17, indicando os vértices como cidades, as arestas como
estradas e as distâncias como o peso de cada aresta.

Figura 17
Cidades de Santa Catarina
v3
Videira
Treze Tílias
34 km
v2

64 km

66 km
38 km

78 km

v1

45 km
Joaçaba
v4

Campos Novos
Fonte: Elaborada pelo autor.

Grafos eulerianos e hamiltonianos 91


Constatando que o número de vértices é igual a 4, tem-se 6 possíveis ciclos, partin-
do de Joaçaba e retornando a Joaçaba, passando por todos os vértices somente uma
vez, a saber:
• Joaçaba → Campos Novos → Videira → Treze Tílias → Joaçaba : 183 km
• Joaçaba → Campos Novos → Treze Tílias → Videira → Joaçaba : 221 km
• Joaçaba → Videira → Campos Novos → Treze Tílias → Joaçaba : 246 km
• Joaçaba → Videira → Treze Tílias → Campos Novos → Joaçaba : 221 km
• Joaçaba → Treze Tílias → Videira → Campos Novos → Joaçaba : 183 km
• Joaçaba → Treze Tílias → Campos Novos → Videira → Joaçaba : 246 km

Percebe-se que alguns ciclos são o inverso de outros. De todos eles, dois
possuem a menor distância, e qualquer um deles é uma solução ao problema
apresentado.

Para resolver o dilema, usa-se um método exato. A maneira mais comum é


enumerar todas as combinações de vértices que formam um ciclo hamiltonia-
no e escolher a de menor custo. Sua complexidade é fatorial, significando que,
para muitas cidades, o problema não termina em tempo hábil.

Outra saída é a aplicação de métodos heurísticos, que podem não resul-


tar exatamente o ciclo de menor custo, mas que chegam a uma boa solução,
terminando o processo em tempo hábil. Os métodos heurísticos demandam
técnicas aplicadas em inteligência artificial, como algoritmos genéticos, buscas
heurísticas, entre outros (SOUZA, 2015).

Há também o método da busca gulosa, um algoritmo não exato, em que,


dado um vértice de partida, é sempre escolhida a aresta de menor custo para
atravessar. Esse processo é repetido sucessivamente até que todos os vértices
tenham sido alcançados e que a única opção seja retornar ao vértice origem
(LOPES, 2020).

Pelo algoritmo guloso (Figura 17), partindo de Joaçaba, a primeira escolha


seria Treze Tílias, que possui a menor distância (38 km). De Treze Tílias, o
algoritmo escolheria Videira (34 km). De Videira, a única opção seria Campos
Novos, visto que não se pode voltar a Treze Tílias nem chegar a Joaçaba (final
do ciclo). De Campos Novos, voltar a Joaçaba, resultando o seguinte caminho:
• Joaçaba → Treze Tílias → Videira → Campos Novos → Joaçaba : 183 km

Coincidentemente é o caminho ideal.

Agora, em um segundo exemplo, considerando o grafo da Figura 18, o qual


contém cinco vértices, percebe-se que trata-se de um grafo completo (todos
os vértices são adjacentes a todos os demais) e que, portanto, possui (n-1)!
ciclos hamiltonianos iniciando em v1, no caso, 24. Enumerando todos os ciclos

92 Teoria dos Grafos


hamiltonianos, é possível perceber que o menor custo é 676, com o seguinte
caminho:
• v1 → v4 → v2 → v3 → v5 → v1

Figura 18
Grafo com ciclos hamiltonianos
v1

185

133 119
v2

200

v5
152
121

150
120

199
v3
174
v4

Fonte: Adaptada de Lopes, 2020.

Aplicando o algoritmo guloso, partindo de v1, as escolhas feitas seriam de:


• v1 para v3: custo 119
• v3 para v5: custo 120
• v5 para v4: custo 199
• v4 para v2: custo 150
• v2 para v1: custo 185

Resultando um custo total de 773, o que não é o menor custo, conforme calcu-
lado anteriormente (676).

Mesmo não sendo o melhor custo, o encontrado pelo método guloso é bem
próximo do melhor custo. Isso deve ser levado em consideração, uma vez que o
tempo para se chegar ao caminho pode ser bem maior pelo método exato.

Uma variação desse algoritmo é o método guloso com repetição, podendo ser
implementado repetindo o algoritmo guloso, partindo de cada vértice, e, ao final,
escolhendo o ciclo de menor caminho. No caso da Figura 18, seriam calculado cinco
ciclos, cada um iniciando em um vértice diferente:

Grafos eulerianos e hamiltonianos 93


• v1 → v3 → v5 → v4 → v2 → v1: custo 773
• v2 → v3 → v1 → v5 → v4 → v2: custo 722
• v3 → v1 → v5 → v4 → v2 → v3: custo 722
• v4 → v2 → v3 → v1 → v5 → v4: custo 722
• v5 → v3 → v1 → v4 → v2 → v5: custo 741

Assim, o ciclo escolhido seria:


• v2 → v3 → v1 → v5 → v4 → v2

Como é um ciclo, deslocando-o para que v1 seja o ponto de partida, tem-se:


• v1 → v5 → v4 → v2 → v3 → v1

Não é o ciclo ideal, mas está mais perto, sendo, portanto, uma solução satisfató-
ria que pode ser calculada em tempo hábil.

A formulação de problemas com base em grafos hamiltonianos é ampla, con-


siderando a dificuldade computacional em se encontrar ciclos hamiltonianos, es-

pecialmente em grafos ponderados. Muitas pesquisas são feitas na área, tendo


como objetivo a descoberta de novas técnicas para minimizar os efeitos da explo-
são combinatória.

CONSIDERAÇÕES FINAIS
Neste capítulo, estudou-se os grafos eulerianos e hamiltonianos. Foram mostrados
teoremas que impõem as condições necessárias e suficientes para que um grafo seja
euleriano, assim como os algoritmos de Hierholzer e Fleury, para encontrar um ciclo
euleriano em um grafo euleriano.
Para os grafos hamiltonianos, foi apresentado que não há teoremas que impõem
condições necessárias e suficientes, já que os teoremas de Dirac e Ore têm condições
suficientes, apenas.
Quando o problema de busca pelo ciclo hamiltoniano envolve pesos e tem como
objetivo um ciclo ótimo partindo de um determinado vértice, verificou-se que a explo-
são combinatória é da ordem de (n-1)!, sendo n o número de vértices do grafo. Perce-
be-se, portanto, que um método exato se torna inviável rapidamente, não terminando
de executá-lo em tempo hábil.
Os métodos heurísticos que envolvem técnicas de inteligência artificial são os mais
indicados. Eles não retornam a solução de menor custo, mas uma com um custo satis-
fatório e em tempo factível.

ATIVIDADES
1. Uma expedição para a exploração das luas de Saturno e Júpiter será lançada,
passando por Calisto, Ganímedes, Io, Mimas e Titã. Após visitar essas luas, a nave
deve retornar à Terra. O diagrama a seguir apresenta a duração da missão, em
anos, estimada para a viagem entre cada par de luas. Qual seria o melhor caminho
para tal expedição?

94 Teoria dos Grafos


Para a resolução deste problema, utilize o algoritmo guloso.

Io Mimas

v4 4,7 v5

5,1

0,8 0,6

5,7
5,2
v3 5,6 v6

3,6 Titã
Calisto
1,5 8,1
1,1
8,2

5,9 3,1

v2 3,2 v1

Ganímedes Terra

2. Resolva a Questão 1 pelo algoritmo guloso com repetição. Mostre todos os


caminhos analisados, o tempo de cada caminho, e escolha que der o menor
resultado, rearranjado para iniciar na Terra (se for o caso).

3. Dado o grafo a seguir, apresente um ciclo euleriano partindo de v1.


v1 v8

v2

v3 v7

v4 v5 v6

4. Considerando o grafo simples G = (V, A), tal que |V| = 6 e ∀v ∈ V grau(v) = 3, prove
que G é hamiltoniano.

Grafos eulerianos e hamiltonianos 95


5. Seja o grafo simples G = (V, A), tal que |V| = 7, os seus vértices possuem os seguintes
graus:
• grau(v1) = 3
• grau(v2) = 1
• grau(v3) = 4
• grau(v4) = 2
• grau(v5) = 2
• grau(v6) = 2
• grau(v7) = 2

Esse grafo é euleriano? Justifique a sua resposta.

REFERÊNCIAS
BOAVENTURA NETTO, P. O. Grafos: teoria, modelos, algoritmos. 3. ed. São Paulo: Blucher, 2003.
FERNANDO, P. H. L. et al. O problema do caixeiro viajante aplicado na distribuição de peças/componentes do
almoxarifado para a montagem de caminhões especiais em uma linha de produção na indústria automobilística.
Sinergia (IFSP Online), São Paulo, v. 20, n. 1, p. 63-74, jan./mar. 2019. Disponível em: https://www.researchgate.
net/publication/332665441_O_PROBLEMA_DO_CAIXEIRO_VIAJANTE_APLICADO_NA_DISTRIBUICAO_DE_
PECASCOMPONENTES_DO_ALMOXARIFADO_PARA_A_MONTAGEM_DE_CAMINHOES_ESPECIAIS_EM_UMA_
LINHA_DE_PRODUCAO_NA_INDUSTRIA_AUTOMOBILISTICA/link/5cc259694585156cd7b18368/download.
Acesso em: 6 jul. 2020.
GOLDBARG, M. C.; GOLDBARG, E. Grafos: conceitos, algoritmos e aplicações. Rio de Janeiro: Elsevier, 2012.
GOMES, M. J. N. et al. O problema do carteiro chinês, algoritmos exatos e um ambiente MVI para análise de
suas instâncias: sistema XNÊS. Pesquisa Operacional, Rio de Janeiro, v. 29, n. 2, p. 323-363, jan./maio/ago. 2009.
Disponível em: http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0101-74382009000200005&lng=en&
nrm=iso. Acesso em: 6 jul. 2020.
LOPES, S. A. Métodos Finitos em Matemática. Arquivo Escolar, 28 mar. 2011. Disponível em: http://
arquivoescolar.org/handle/arquivo-e/45. Acesso em: 6 jul. 2020.
NICOLETTI, M. C. do.; HRUSCHKA JUNIOR, E. R. Fundamentos da teoria dos grafos para computação. São Paulo:
LTC, 2018.
SOUZA, M. M. Heurísticas para o problema do caixeiro viajante com seleção de hotéis. Viçosa, 2015. Dissertação
(Mestrado em Ciência da Computação) – Universidade Federal de Viçosa. Disponível em: https://www.
locus.ufv.br/bitstream/handle/123456789/6650/texto%20completo.pdf?sequence=1&isAllowed=y.
Acesso em: 6 jul. 2020.
SZWARCFITER, J. L. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.

96 Teoria dos Grafos


5
Problemas em Grafos
O estudo de teoria de grafos é muito amplo e vários problemas surgem
da análise destas estruturas matemáticas. Nesse sentido, serão abordados
neste capítulo alguns problemas em grafos, como as cliques e os conjuntos
estáveis, as cliques máximas, as coberturas, a planaridade e a coloração. Na
seção 5.1 serão apresentados os conceitos de clique em grafos e seu com-
plementar, os conjuntos estáveis. Na seção 5.2 será desenvolvido o concei-
to de clique máxima, problema de solução difícil (NP-Completo). Em seguida,
na seção 5.3, serão abordadas as coberturas de vértices e coberturas de
arestas. O problema da planaridade de grafos também é estudado. Por fim,
na seção 5.5, será exposto o problema da coloração em grafos.

5.1 Cliques e Conjuntos Estáveis


Vídeo Imagine uma empresa que, preocupada com a divulgação de seus produtos,
mas com poucos recursos, decide investir em marketing digital em redes sociais.
Levando em consideração um orçamento pequeno, o gerente de marketing quer
divulgar para pessoas ou para empresas que possam ajudar na propagação para
um conjunto bem conectado de contatos, o qual ele chamou de panelinha. Para
otimizar seus gastos, o gerente não quer compartilhar sua divulgação com mais de
um contato de uma mesma panelinha.

A Figura 1 a seguir pode ser utilizada para esquematizar essa estratégia de mar-
keting. Com anúncios em apenas quatro dessas panelinhas, o gerente de marketing
teoricamente conseguiria uma divulgação para 100 pessoas.

Figura 1
Panelinhas

Panelinha 2
Panelinha 1

Empresa
Panelinha 3

Panelinha 4
Fonte: Elaborada pelo autor.

Problemas em Grafos 97
Modelando este problema para grafos, em que cada pessoa é um vértice e cada
conexão uma aresta, percebe-se que grupos altamente conectados são subgrafos
completos do grafo total, isto é, dentro de cada panelinha todas as pessoas estão
conectadas entre si. Tomando cada panelinha como um grafo individual, diz-se que
é um grafo completo.

Curiosidade Dado um grafo não orientado denotado por G = (V, A), uma clique é um subcon-
junto de vértices de G, em que todos os seus vértices são conectados dois a dois.
Foi no trabalho de Luce e Perry
(1949) que a palavra clique foi Em outras palavras, uma clique V’ de G é tal que V’ ⊂ V e ∀v, w ∈ V’, assim como v ≠
utilizada pela primeira vez para w e (v, w) ∈ A.
representar um subgrafo completo,
denotando um grupo de pessoas Apesar de a definição indicar um subconjunto de vértices, muitos autores tam-
que se conhecem em uma rede bém definem o termo clique como um subgrafo e, nesse caso, uma clique é um
social. Essa palavra, portanto, foi
usada para designar um grupo de subgrafo completo de G. Outra maneira de indicar a clique é definindo-a como um
pessoas, uma panelinha e não diz subgrafo isomorfo a um grafo completo Kn.
respeito ao ato de clicar.
Percebe-se que o conceito é parecido com o de grafos completos, podendo ser
assim designado quando todos os seus vértices são conectados dois a dois. Os
grafos completos possuem uma notação própria, a saber Kn, em que n é o número
de vértices. Assim, a Figura 2 apresenta os grafos K2, K3, K4 e K5 respectivamente
(lembrando que K1 é um grafo completo contendo somente um vértice).

Figura 2
Grafos Completos: K2, K3, K4 e K5 v2
v2 v2 v1 v2

v1 v3

v1 v1 v3 v4 v3 v4 v5

Fonte: Elaborada pelo autor.

Assim, um grafo possui uma clique se possuir um subgrafo completo, por exem-
plo, o grafo G apresentado na Figura 3.

Nesse grafo podem-se observar as seguintes cliques:


• {v1}
Figura 3
• {v2} Grafo G contendo cliques
• {v3} v3
• {v4}
• {v5}
• {v1, v2} v2 v4

• {v2, v3}
• {v3, v4}
• {v4, v5}
• {v1, v5}
v1 v5
• {v2, v4}
Fonte: Elaborada pelo autor.
• {v2, v3, v4}

98 Teoria dos Grafos


As cliques {v1, v5}, {v3, v4} e {v2, v3, v4} podem ser visualizadas de acordo com a
Figura 4.

Figura 4
Grafo com algumas cliques destacadas

v3

v2 v4

v1 v5

Fonte: Elaborada pelo autor.

Isolando essas cliques como subgrafos induzidos de G, conforme a Figura 5, per-


cebe-se que cada uma delas é um subgrafo completo de G, sendo respectivamente
K2, K2 e K3.

Figura 5
Cliques de G separadas
v3 v3

v1 v5 v4 v2 v4

Fonte: Elaborada pelo autor.

Define-se como tamanho de uma clique, ou sua cardinalidade, o Figura 6


número de vértices em cada; sendo C uma clique, |C| é a sua cardi- Grafo H
v3
nalidade. Para as cliques da Figura 5, seus tamanhos são dois, dois
e três, respectivamente. Por exemplo, seja o grafo H da Figura 6, v1
consegue-se observar duas cliques de tamanho três, a saber: v5
v4
• {v1, v5, v6}
• {v2, v3, v4} v2
Seus subgrafos induzidos podem ser vistos na Figura 7.
v6
Figura 7 Fonte: Elaborada pelo autor.
Cliques de tamanho 3 do Grafo H

v1 v3
v5

v4

v6 v2
Fonte: Elaborada pelo autor.

Problemas em Grafos 99
Partindo do conceito de clique, chama-se conjunto independente de vértices, tam-
bém conhecido como conjunto estável de vértices, o conjunto de vértices totalmente
desconexo, sem arestas entre eles. Isto é, um conjunto independente de vérti-
ces S de G é tal que S ⊂ V e ∀v, w ∈ S, para v ≠ w e (v, w) ∉ A.

Dado o grafo da Figura 8, é possível obter os seguintes conjuntos independen-


tes de vértices:
• {v1, v4}
• {v1, v3}
• {v1, v5}
• {v2, v4}
• {v3, v5}
• {v1, v3, v5}

Na Figura 9 consegue-se observar os conjuntos {v1, v4}, {v3, v5} e


Figura 8 {v1, v3, v5}. Percebe-se que, para cada um desses conjuntos, não há
Grafo J v1
arestas para qualquer par de vértices.

Define-se como tamanho de um conjunto independente de vértices


o seu número de vértices. Para os conjuntos mostrados na Figura 8,
v5 v3
os tamanhos são: dois, dois e três, respectivamente.

Um conjunto independente, ou estável de vértices, é máximo se


tiver a maior cardinalidade entre todos os conjuntos estáveis do gra-
fo. Outro conceito é o número ou índice de estabilidade do grafo, dado
pela cardinalidade de um conjunto estável máximo do grafo. Dado
v2 v4
um grafo G, esse índice é denotado por α(G).
Fonte: Elaborada pelo autor.
Assim, os conceitos de clique e conjunto independente de vérti-
ces são complementares. Enquanto no primeiro há uma aresta en-
tre todos os pares de vértices, no segundo não há. Isso significa que um conjunto
vértices E é estável em um grafo G, se, e somente se, for uma clique no grafo com-
plementar de G. Seja o grafo J apresentado na Figura 9.

Figura 9
Conjuntos independentes de vértices de G: {v1, v4}, {v3, v5} e {v1, v3, v5}

v4 v3 v3

v1 v5 v1 v5

Fonte: Elaborada pelo autor.

O conjunto de vértices {v1, v3, v5} é um conjunto estável de vértices de J, pois, no


grafo complementar exibido na Figura 10, {v1, v3, v5} é uma clique.

100 Teoria dos Grafos


Um conceito correlato ao conjunto independente de vértices é o
Figura 10
emparelhamento – matching, ou também acoplamento. Um empare- Grafo complementar a J
lhamento de um grafo G é um conjunto de arestas que não compar- v1
tilham vértices.
v5 v3
A Figura 11 apresenta um grafo contendo um emparelhamento,
sendo o conjunto de arestas {(v1, v2) e (v4, v5)}. Perceba que essas
arestas não compartilham vértices.

Um emparelhamento máximo é aquele que contém o maior


número de arestas possível. Encontrar um emparelhamento máxi-
mo pode ser feito em tempo polinomial e tem-se vários algoritmos v2 v4
eficientes desenvolvidos (SZWARCFITER; FIGUEIREDO, 1999). Fonte: Elaborada pelo autor.

As aplicações do estudo das cliques extrapolam a área da com-


putação e da matemática. Por exemplo, o trabalho de Rhodes et al. Figura 11
(2003), na área da química, mapeou o problema de similaridade de Grafo com emparelhamento
farmacóforos em um banco de dados como um problema de detec- v3
ção de cliques. Os farmacóforos são um conjunto de características
que asseguram interações moleculares e esse estudo é importante
para o desenvolvimento de moléculas bioativas (RHODES et al., 2003). v2 v4
A aplicação de emparelhamentos também é ampla; um exemplo
é o problema da atribuição de pessoal (SZWARCFITER; FIGUEIREDO,
1999). Suponha uma possível contratação de candidatos a vagas em
uma empresa, há n candidatos e m posições disponíveis. Cada can-
didato está qualificado a uma ou mais posições. O problema é des- v1 v5
cobrir se há uma forma de alocar todos os candidatos de modo que
Fonte: Elaborada pelo autor.
cada um ocupe uma posição. Para uma resolução provável, é possí-
vel realizar o emparelhamento em grafos bipartidos.

5.2 Cliques Máximas


Vídeo Dando continuidade ao estudo das cliques, existem dois conceitos importantes
na área de grafos que devem ser levados em consideração: a clique maximal e a
clique máxima.
Figura 12
Uma clique maximal é um conjunto de vértices Grafo H v3
todos adjacentes entre si e que não está estritamen-
te contida em outra clique (GOLDBARG; GOLDBARG,
2012). Isso significa que, tomada uma clique C de um v2 v4
grafo, se houver possibilidade de adicionar mais um
vértice adjacente a todos os demais, formando um
subgrafo completo e, portanto, outra clique C’, a cli-
que C não é maximal. Por exemplo, veja o grafo H da
Figura 12.
v1 v5

v6
Fonte: Elaborada pelo autor.
Problemas em Grafos 101
Figura 13
Clique C no Grafo H Observe a clique C formada pelos vértices { v1, v2, v4 }, a qual pode
ser visualizada por arestas tracejadas na Figura 13 a seguir.
v3
Se houver possibilidade de adicionar mais um vértice à clique C,
de maneira que esse vértice seja adjacente a todos os elementos de
C, então, C não é uma clique maximal. Analisando o grafo da Figura
v2 v4
13, percebe-se que v3 e v6 não são adjacentes a todos os vértices de
C, mas v5, sim. O vértice v5 é adjacente a v1, v2 e v4 , portanto, a clique
C não é maximal, pois está contida em C’ = { v1, v2, v4, v5 }, conforme
mostra a Figura 14.

Analisando os demais vértices, v3 não é adjacente a todos os vér-


v1 v5
tices em C’, assim como v6. Portanto, C’ é uma clique maximal do
grafo H e pode ser visualizada na Figura 15.

v6 Figura 14 Figura 15
Fonte: Elaborada pelo autor. Clique C’ do Grafo H Clique Maximal C’ do Grafo H
v3 v2 v4

v2 v4

v1 v5
Fonte: Elaborada pelo autor.

v1 v5

v6
Fonte: Elaborada pelo autor.

Convém ressaltar que podem haver mais cliques maximais em um grafo. A


exemplo de H, a clique C’’= {v1, v2, v5, v6} também é maximal e pode ser observada
na Figura 16.

Tomando novamente o grafo H de exemplo, a clique C’’’ = { v2, v3, v4 }, mostrada


na Figura 17, também é maximal, apesar de possuir menos vértices que C’ e C’’.
Isso porque uma clique é maximal se ela não está contida em outra clique e não há
relação com outras cliques que podem ser encontradas no grafo.

Figura 16 Figura 17
Clique maximal C’’ do Grafo H v4 Clique Maximal C’’’ do Grafo H
v3

v2 v4
v1 v5 Fonte: Elaborada pelo autor.

v6
Fonte: Elaborada pelo autor.

102 Teoria dos Grafos


Há outro conceito básico em grafos, usado para denotar a maior clique que
pode ser encontrada em um grafo, que é a clique máxima.

Uma clique máxima é uma clique de maior cardinalidade, isto é, a que possui
o maior número de vértices entre todas as possíveis cliques do grafo (GOLDBARG;
GOLDBARG, 2012).

Dado um grafo G = (V, A), o conjunto de todas as cliques de G é denotado por


C(G). O tamanho da clique máxima, também chamado de número de clique, é dado
por ω(G) = max { |C| | C ∈ C(G)}.

Observe o grafo I = (V, A), apresentado na Figura 18.

Figura 18
Grafo I
v1

v5
v6
v4

v2

v3
Fonte: Elaborada pelo autor.

A Figura 19 apresenta todas as cliques maximais de I. Não serão enumeradas


todas as cliques, já que seria necessário acrescentar todos os pares de vértices
adjacentes, pois são cliques de tamanho 2.

Figura 19
Cliques Maximais de I

v1 v1 v4
v1
v6 v5
v2
v4
v4
v3
v2 Curiosidade
Fonte: Elaborada pelo autor. Em seu artigo, Richard Karp (apud
MILLER; THATCHER; BOHLINGER,
Assim, o grafo I possui três cliques máximas, a saber: 1972) demonstrou que 21
problemas famosos da ciência da
• { v1, v2, v4 } computação são NP-completos,
• { v2, v3, v4 } usando como base a prova feita
em 1971, por Stephen Cook, o
• { v1, v4, v5 } qual constatou que o problema
da Satisfatibilidade Booleana
Assim, ω(I) = 3 é NP-Completo. O trabalho de
O Problema da Clique é um problema de decisão, em que, dados um grafo G e Karp impulsionou os estudos em
complexidade computacional,
um número inteiro k, deve-se decidir se G tem uma clique de tamanho pelo menos k. principalmente se voltando ao
Esse problema é da classe NP-completo e faz parte da clássica lista de Karp, conten- grande problema não resolvido até
hoje: P = NP?
do 21 problemas provados como NP-completos.

Problemas em Grafos 103


Assim, uma solução exata para o problema da clique é exponencial. Pesqui-
sas atuais tentam diminuir sua ordem de complexidade pelo refinamento de
algoritmos clássicos, como branch-and-bound, técnica baseada na enumeração de
todas as possíveis cliques máximas, descartando aquelas que não satisfazem de-
terminados limites impostos pelo algoritmo (ZUGE, 2017).

5.3 Coberturas
Vídeo Suponha que há um projeto municipal para instalar câmeras de monitoramento
de tráfego em ruas e avenidas de determinada cidade. Um dos objetivos é que os
motoristas, ao trafegarem pelo município, sempre passem por uma câmera. En-
tretanto, como o orçamento é um problema em qualquer administração, deve-se
gastar o mínimo possível, instalando o menor número de câmeras.

Modelando esse problema como um grafo, consegue-se representar as ruas


pelas arestas e os cruzamentos pelos vértices. O objetivo é encontrar o menor nú-
mero de vértices, de modo que todas as arestas desse grafo estejam conectadas a
um vértice desse conjunto. Assim, instalam-se as câmeras nesses cruzamentos.
Figura 20 Dado um grafo não orientado G = (V, A), um conjunto de
Grafo G
v3 vértices S é chamado de cobertura de vértices de G se toda
aresta de G é incidente a pelo menos um vértice de S. Isto é,
S ⊆ V, tal que se (v, w) ∈ A, então, ou v ∈ S, ou w ∈ S (ou
v2 v4 ambos). Diz-se que S cobre as arestas de G (NICOLETTI;
HRUSCHKA, 2018).

Observe o grafo da Figura 20: os conjuntos de vértices


V’ = {v1, v3, v4, v5, v6} e V’’ = {v2, v4, v5} são coberturas de vértices.

Os dois conjuntos podem ser vistos na Figura 21, em


v1 v5 que os vértices das coberturas V’ e V’’, respectivamente,
estão representados normalmente e os vértices desconsi-
derados estão representados em branco. Percebe-se que
v6
Fonte: Elaborada pelo autor.
todas as arestas possuem, pelo menos, uma ponta em um
vértice da cobertura.

Figura 21
Representação das coberturas de Vértices V’ e V’’, respectivamente

v3

v4 v2 v4

v1 v5 v5

v6
Fonte: Elaborada pelo autor.

104 Teoria dos Grafos


O número de cobertura de vértices de um grafo G é denotado τ(G) e é a car- Saiba mais
dinalidade da menor cobertura de vértices de G. Assim, no exemplo do grafo da Fi- Um problema de decisão,
conforme o apresentado para a
gura 20, o número de cobertura de vértices seria τ(G) = 3, pois não há um conjunto
cobertura de vértices, é formulado
de menos de três vértices que cubra as arestas de G. com um enunciado, para o qual se
deseja uma resposta sim ou não.
Um conceito análogo à cobertura de vértices é a cobertura de arestas. Dado um
No caso, a versão do problema é
grafo G = (V, A), um conjunto C de arestas é chamado de cobertura de arestas, se a seguinte:
todo vértice de G for extremidade de, pelo menos, uma aresta de C. Ou seja, C ⊆ A, Dado o grafo G e um valor
tal que ∀v ∈ V e ∃w ∈ V e (v, w) ∈ C. Diz-se que C cobre os vértices de G. inteiro positivo k, G contém uma
cobertura de vértices de tamanho,
Considerando o grafo G da Figura 20, os conjuntos de arestas A’ = { (v3, v5), (v2, v4), no máximo, k?
(v1, v4), (v5, v6) } e A’’ = { (v1, v4), (v2, v6), (v3, v5) } são coberturas de arestas. Esses dois Formulado dessa forma, o proble-
ma faz parte dos 21 problemas
conjuntos podem ser vistos na Figura 22, em que as arestas das coberturas A’ e A’’, NP-Completos de Karp.
respectivamente, estão representados normalmente e as arestas desconsideradas
estão representadas em tracejado. Percebe-se que todos os vértices são atingidos
por, no mínimo, uma aresta das coberturas.

Figura 22
Representação das Coberturas e Arestas A’ e A’’, respectivamente.

v3 v3

v2 v4 v2 v4

Saiba mais
v1 v5 v1 v5 Segundo Gersting e Iório (2012),
um problema é tratável quando
há um algoritmo que o resolve
v6 v6 em um tempo proporcional a
Fonte: Elaborada pelo autor. um polinômio do tamanho de
sua entrada. Esses problemas
O número de cobertura de arestas de um grafo G é denotado ξ(G), que é a cardi- estão na classe de complexidade
P, ou seja, os problemas que são
nalidade da menor cobertura de arestas de G. Assim, para o grafo da Figura 20, ξ(G) = 3,
resolvidos em máquinas de turing
pois não há como cobrir todos os vértices do grafo com menos de três arestas. determinística, em tempo poli-
nomial, em relação ao tamanho
O problema da cobertura de vértices mínima é um problema de otimização. da entrada.
Seu objetivo é encontrar uma cobertura de vértices com o menor número de vérti- Convém ressaltar que um polinômio
ces possível e sua formulação como um problema de decisão também é um dos 21 pode conter qualquer expoente, por
exemplo: n1560. Isso não deixa de
problemas NP-Completos de Karp.
torná-lo tratável, mas pode levar
O problema da cobertura de arestas mínima é um problema de otimização e uma grande quantidade de tempo
de processamento.
tem como objetivo encontrar uma cobertura de arestas com o menor número de
Já os intratáveis são aqueles cujos
arestas possível. Ao contrário do problema de cobertura de vértices mínima, esse é algoritmos são inerentemente
um problema polinomial, isto é, um problema tratável. ineficientes, com tempo expo-
nencial ao tamanho da entrada.
Para resolver o problema da cobertura de vértices mínima, não se pode usar um Esses problemas são resolvidos
algoritmo fundado em força bruta (enumerando todas as possíveis coberturas e por uma máquina de turing não
determinística em tempo poli-
testá-las), pois já se sabe que o tempo de execução é exponencial em relação ao ta-
nomial, em relação ao tamanho
manho do grafo. Assim, algoritmos que retornam uma solução aproximada precisam da entrada, estando, portanto, na
ser empregados, não retornando a uma solução ótima, mas uma solução satisfatória. classe de complexidade NP.

Problemas em Grafos 105


Já o problema da cobertura de arestas mínima pode ser resolvido de uma ma-
neira ótima, encontrando um emparelhamento máximo, ou seja, um conjunto in-
dependente de arestas que não compartilham vértices e aplicando um algoritmo
guloso para agregar todos os vértices.

5.4 Planaridade
Vídeo Um grafo é planar se sua representação gráfica em um plano pode ser feita
sem que suas arestas se cruzem (SZWARCFITER, 2018).

Tome como exemplo o grafo apresentado na Figura 23. Apesar da sua represen-
tação na Figura 23 apresentar intersecção nas arestas (v2, v3) com (v1, v5) e, também,
(v3, v4) com (v1, v5), o grafo G pode ser representado graficamente de outra forma,
como mostra a Figura 24. Portanto, o grafo é planar.

Figura 23 Figura 24
Grafo G com interseções em arestas Grafo G com interseções em arestas

v2 v4 v2 v4

v3

v1 v5 v1 v5
Fonte: Elaborada pelo autor.

v3
Fonte: Elaborada pelo autor.

Uma das motivações do estudo de planaridade de grafos veio do problema das


três casas, enunciado pelo matemático inglês Henry Ernest Dudeney (1857-1930)
em 1913 (SANTOS, 2017).

Nesse problema, três companhias de fornecimento de serviços públicos devem


servir três casas distintas. Todas devem usar tubulações subterrâneas na mesma
profundidade do solo, por questões de segurança. Representado como um gra-
fo, pode-se observar seis vértices e nove arestas. O problema é descobrir se há a
possibilidade de suprir todos os serviços, sem que as linhas se cruzem.

A Figura 25 a seguir ilustra este problema.

Figura 25
Problema das três casas
Companhia Companhia Companhia
Luz Água Telefone
v1 v2 v3

v4 v5 v6
Casa 1 Casa 2 Casa 3
Fonte: Elaborada pelo autor.

106 Teoria dos Grafos


Ao ser enunciado como um problema de grafos, percebe-se que o problema das
três casas pode ser representado pelo grafo bipartido completo K3,3. Para respon-
der à questão, deve-se descobrir se o K3,3 permite uma representação gráfica em
que suas arestas não se cruzam, isto é, se ele é planar.
Figura 26
No problema das três casas, em especial, não há uma forma de Grafo planar e suas faces
desenhar o grafo em um plano sem que as arestas se cruzem. Inclu- v2
sive, o K3,3 é uma referência para a planaridade, conforme será visto
no teorema de Kuratowski mais adiante.
1
Em grafos planares, as arestas dividem o plano em regiões cha-
v1 v3 3
madas de faces. Seja o exemplo do grafo da Figura 26, nesse grafo
tem-se quatro faces e a face de número quatro é chamada de face 2
externa.
4
O Teorema a seguir apresenta a Fórmula de Euler que relaciona v4
os vértices, arestas e faces em um grafo planar conexo. Fonte: Elaborada pelo autor.

Teorema 1

Fórmula de Euler (1750)

Seja um grafo conexo planar G e sejam: n o número de vértices, a o número de


arestas e f o número de faces, tem-se n – a + f = 2.

Essa fórmula também pode ser apresentada como n + f = a + 2 e percebe-se,


facilmente, sua igualdade (SZWARCFITER, 2018). Considerando o grafo da Figura 26,
pode-se encontrar n = 4, f = 4 e a = 6, então, n + f = a + 2, assim, 4 – 6 + 4 = 2.

Pela fórmula de Euler, percebe-se que quanto maior for o número de arestas
em um grafo, relativo ao número de vértices, mais difícil será a obtenção de uma
representação plana do grafo. Isso é dado por meio do seguinte corolário, que de-
fine um limite máximo para o número de arestas.

Corolário 1: seja um grafo planar simples contendo n vértices, n ≥ 3, e a arestas, Saiba mais

tem-se a ≤ 3n – 6. Lemas, Teoremas e Corolários são


conceitos são correlatos:
Na prática, isso significa, por exemplo, que em um grafo planar com cinco vér- • Lema: é uma afirmação que
tices há, no máximo, 9 arestas. Deve-se tomar cuidado, pois o Corolário 1 pode ser ajuda a provar um teorema.
usado para demonstrar que um grafo não é planar, mas, se a condição for satisfei- Basicamente, lema é um
teorema anterior, que ajuda a
ta, não há garantia de que o grafo é planar. provar outro teorema.
Outro exemplo pode ser visto ao considerar o K3,3 (Figura 27), o qual possui 6 • Teorema: é uma proposição
verdadeira, visto que possui
vértices e 9 arestas. Aplicando-se a fórmula do Corolário 1, a condição é satisfeita, uma prova
isto é, 9 ≤ 3*6 – 6, mas o grafo K3,3 não é planar. • Corolário: é uma afirmação,
uma proposição ou outro teore-
Outro resultado importante advindo do Teorema 5.1 é o corolário a seguir.
ma, que pode ser estabelecido
Corolário 2: todo grafo planar simples contém um vértice cujo grau é no máxi- como consequência de um
teorema já provado.
mo cinco.

Esse resultado é muito importante, pois coloca um limite numérico em, pelo
menos, um dos vértices do grafo planar.

Problemas em Grafos 107


Outros resultados centrais para o estudo de grafos planares são as provas de
que K5 e K3,3 não são planares (NICOLETTI; HRUSCHKA, 2018). A Figura 27 apresenta
as formas mais comuns de representar graficamente K5 e K3,3.

Figura 27
Representações de K5 e K3,3

v1
v1 v2 v3

v5 v2

v4 v3 v4 v5 v6
K5 K3,3
Fonte: Elaborada pelo autor.

Percebe-se que o K3,3 atende ao Corolário 1, ou seja, a = 9, n = 6, portanto,


9 ≤ 3*6 – 6, isto é 9 ≤ 12. Mesmo assim, K3,3 não é planar.

Fazem-se necessárias, também, algumas definições em grafos para o estudo de


grafos planares. Em um grafo G = (V, A), dois vértices, v, w ∈ V, estão em série, se
Figura 28 existe um vértice x ∈ V, tal que x ≠ v, x ≠ w, grau(x) = 2 e (v, x), (x, w) ∈ A. A Figura 28
Grafo com vértices em série
apresenta um grafo cujos vértices v2 e v4 estão em série. Perceba que o vértice v3
v2 v3 v4
possui grau 2 e é adjacente a v2 e v4, atendendo às condições impostas na definição.

Dado um grafo G = (V, A) e os dois vértices v, w ∈ V em série, uma redução de


série é a eliminação do vértice x e a substituição das arestas (v, x) e (x, w) pela
aresta (v, w). Assim, para o grafo da Figura 28, o grafo da Figura 29 (lado direito) foi
v1 v5 obtido de uma redução de série, no caso, eliminando-se o vértice v3 e as arestas (v2,
Fonte: Elaborada pelo autor. v3) e (v3, v4), ligando o v2 ao v4 pela aresta (v2, v4).

Figura 29
Redução de série

v2 v3 v4 v2 v4

v1 v5 v1 v5
Fonte: Elaborada pelo autor.

Dois grafos, G’ e G’’, são homeomorfos se podem ser obtidos a partir do mesmo
grafo e de uma sequência de reduções de séries. Outra forma de definir que G’ e
G’’ são homeomorfos é se eles podem ser reduzidos a grafos isomorfos por meio
de reduções de séries.

A Figura 30 (do lado esquerdo) apresenta dois grafos homeomorfos, pois ao se


aplicarem várias reduções de séries, obtém-se dois grafos isomorfos (do lado direito).

108 Teoria dos Grafos


No primeiro grafo da Figura 30, foi reduzida a série (v1, v6), (v6, v7) e, em seguida,
a (v1, v7), (v7, v5). No segundo grafo da Figura 30 foi reduzida a série (v1, v7), (v7, v2)
seguida da (v1, v6), (v6, v5) e, por fim, a (v2, v3), (v3, v4).

Figura 30
Grafos homeomorfos

v2 v3 v4 v2 v4

v1 v6 v7 v5 v1 v5

v2 v3 v4 v2 v4

v7

v1 v5 v1 v5
v6
Fonte: Elaborada pelo autor.

Por meio dos grafos K5 e K3,3 e do conceito de homeomorfismo de grafos, o Teo-


rema de Kuratowski dá as condições necessárias e suficientes para indicar se um
grafo é planar ou não (NICOLETTI; HRUSCHKA, 2018).

Teorema 2

Teorema Kuratowsk

Um grafo G é planar, se, e somente se, não tem um subgrafo homeomorfo a K5


ou K3,3.

Observe o grafo não planar da Figura 31. Para mostrar que esse grafo não é
planar, pode-se buscar por um subgrafo homeomorfo a K5 ou K3,3. Um subgrafo é
obtido pela remoção de arestas e vértices. Para a propriedade de homeomorfismo,
faz-se redução de série.

Figura 18
Grafo não planar

v2 v3
v1

v8
v5

v4 v7 v6

v9

Fonte: Elaborada pelo autor.

Problemas em Grafos 109


Para provar que esse grafo não é planar, a ideia é eliminar vértices e arestas
para encontrar um subgrafo que seja homeomorfo a K5 ou K3,3. Ao encontrar esse
subgrafo, efetuam-se reduções de série até encontrar um subgrafo que seja iso-
morfo a K5 ou K3,3.

A Figura 32 apresenta os passos efetuados até aqui. Primeiramente, serão elimi-


nadas as arestas (v4, v5) e (v2, v3). Esse subgrafo obtido é homeomorfo a K3,3 e, para
ter certeza, efetuam-se as seguintes reduções de série: 1ª. redução (v1, v9) e (v9, v5),
2ª. redução (v2, v8) e (v8, v5), e 3ª. redução (v3, v7), (v7, v6). Assim, pode-se perceber que
o grafo obtido é isomorfo a K3,3.

Figura 32
Passos para provar que o grafo não é planar

v2 v3 v2 v3
v1 v1

v8 v8
v5 Remoção v5
de (V4, V5) e
v4 v7 v6 (V2, V3)
v4 v7 v6

v9 v9

v2 v3 v2 v3
v1 v1

v8 v8
v5 Redução de v5
série (V1, V9) e
v4 v7 v6 (V9, V5) v7 v6
v4
v9

v2 v3 v2 v3
v1 v1

v8
v5 Redução de v5
série (V2, V8) e
v4 v7 v6 (V8, V5) v7 v6
v4

v2 v3 v2 v3
v1 v1

Redução de
série (V3, V7) e
v5 (V7 V6) v5

v4 v7 v6 v4 v6

Fonte: Elaborada pelo autor.

O primeiro algoritmo para teste de planaridade surgiu, em 1961, com Auslander


e Parter (AUSLANDER; PARTER, 1961). O algoritmo posteriormente foi corrigido por

110 Teoria dos Grafos


Goldstein e, então, ficou conhecido como Algoritmo Auslander, Parter e Goldstein (Al-
goritmo APG) e possui complexidade cúbica (GOLDSTEIN, 1963).
O primeiro algoritmo com complexidade de tempo linear, para verificação de
planaridade de grafos, é o Hopcroft e Tarjan (Algoritmo HT), fundamentado no al-
goritmo APG (HOPCROFT; TARJAN, 1974).
Outros algoritmos também foram desenvolvidos e são tópicos de pesquisa mais
avançada na área.

5.5 Coloração
Vídeo Em grafos, uma coloração vértices é uma atribuição de rótulos aos vértices de
grafos, tradicionalmente chamados de cores, de tal forma que não haja dois vérti-
ces adjacentes rotulados com a mesma cor (NICOLETTI; HRUSCHKA, 2018). Em teoria
de grafos, também há os conceitos de coloração de arestas e coloração de faces, mas,
aqui, será abordada apenas a coloração de vértices, sendo o ponto de partida para
o estudo de coloração em grafos.
A Figura 33 apresenta um grafo com uma coloração aplicada. Figura 33
Uma coloração de vértices contendo k cores diferentes é chama- Grafo com uma coloração aplicada
da de k-coloração e, nesse caso, o grafo é k-colorível. No exemplo v3
apresentado na figura tem-se três cores, portanto, trata-se de uma
3-coloração para o grafo.
v2 v4
Claramente, percebe-se que em um grafo com n vértices, po-
de-se usar n cores, uma para cada vértice e, dessa forma, segu-
ramente, vértices adjacentes não possuirão a mesma cor. Assim,
encontrar uma n-coloração em um grafo com n vértices, é trivial e
não possui utilidade prática. Já encontrar uma coloração mínima,
v1 v5
isto é, obtida com um número mínimo de cores, é um problema
Fonte: Elaborada pelo autor.
difícil e possui muitas aplicações práticas.
Em um grafo G, o número mínimo n de cores possíveis, tal que existe uma
n-coloração em G, é chamado de índice cromático ou número cromático, denotado
por χ(G). Assim, se χ(G) = n, então, G é n-cromático.
Se o grafo possui laços (vértices adjacentes a si mesmos), então, não há colora-
ção possível. Se existem arestas paralelas, ou seja, arestas que incidem nos mes-
mos vértices, diz-se que os vértices em questão são adjacentes e será considerada
somente uma dessas arestas. Assim, consideram-se somente grafos simples.

Com base nisso, tem-se os seguintes teoremas e definições:

Teorema 3
Se um grafo G tem n vértices, então, χ(G) ≤ n.

Esse teorema é intuitivo. Se todos os n vértices de um grafo forem conecta-


dos a todos os demais, será necessário n cores para colori-lo. Caso contrário, há a
possibilidade do número cromático ser menor que n. Então, n é um limite máximo
para o número de cores necessárias para colorir qualquer grafo.

Problemas em Grafos 111


Um grafo em que cada vértice é conectado a todos os demais é chamado de gra-
fo completo. Um grafo completo, com n vértices, é denotado por Kn e, assim, segue
o próximo teorema.

Teorema 4

Seja o grafo Kn, então, χ(Kn) = n, para todo n ≥ 1.

Isto é facilmente observado em grafos completos. Como o exemplo do K5, na


Figura 34, em que são cinco vértices e cada vértice é adjacente aos outros quatro
vértices. Para o Kn, cada vértice é ligado aos outros n – 1 vértices. Assumindo v1, é
necessária uma cor para colorir v1 e cores diferentes para cada vértice adjacente,
ou seja, mais quatro cores. O mesmo raciocínio vale para Kn.

A Figura 35 apresenta uma coloração possível para o K5.

Figura 34 Figura 35
Grafo K5 Grafo K5 colorido
v1 v1

v5 v2 v5 v2

v4 v3 v4 v3

Fonte: Elaborada pelo autor. Fonte: Elaborada pelo autor.

O Teorema 4 também relaciona os conceitos de coloração e cliques, isto é,


subgrafos completos. Como são necessárias p cores para colorir os p vértices de
uma clique, então, para um grafo G, seu número cromático é maior ou igual ao
tamanho da sua maior clique. Pode-se dizer que, se um grafo G contém Kn como
subgrafo, então, χ(G) ≥ n.

O próximo teorema apresenta o valor do número cromático para grafos


bipartidos.

Teorema 5

Seja um grafo G não vazio, tem-se χ(G) = 2, ou seja, o grafo é bicolorível, se, e
somente se, G for bipartido.

Esse teorema também é intuitivo, pois os grafos bipartidos são formados por
dois conjuntos de vértices, sendo que os vértices pertencentes a cada um desses

112 Teoria dos Grafos


conjuntos não são adjacentes entre si. Desse modo, para cada conjunto, basta atri-
buir uma cor a todos seus vértices e, assim, o grafo total é bicolorível.

A Figura 36 mostra um grafo bipartido, visto que pode ser separado em dois
conjuntos de vértices, {v1, v2} e {v3, v4, v5}, de modo que os vértices não são adja-
centes dentro dos conjuntos apresentados e as arestas existentes ligam vértices
entre os conjuntos. Assim, cada um desses conjuntos recebe uma cor e a Figura 37
apresenta uma coloração possível.

Figura 36 Figura 37
Grafo Bipartido Grafo Bipartido Colorido

v1 v1

v3 v4 v5 v3 v4 v5

v2 v2
Fonte: Elaborada pelo autor. Fonte: Elaborada pelo autor.

O conceito de coloração também é relacionado ao de conjunto independente de


vértices. Um conjunto independente de vértices, ou um conjunto estável de vértices,
de um grafo é o conjunto de vértices totalmente desconexos. Em outros termos,
eles não são adjacentes entre si.

Essa propriedade pode ser observada no grafo da Figura 37, em que os conjun-
tos {v1, v2} e {v3, v4, v5} possuem vértices não adjacentes entre si e, portanto, são
conjuntos estáveis de vértices.

A Figura 38 apresenta o grafo G.

Figura 38
Grafo G
v7

v4 v5

v6
v2 v1

v3
Fonte: Elaborada pelo autor.

Consegue-se obter três conjuntos independentes de vértices de G, que são


disjuntos, por exemplo:

Problemas em Grafos 113


• {v5, v1, v7}
• {v2, v3, v4}
• {v6}

Assim, cada um desses conjuntos pode ser colorido com uma cor diferente, con-
forme mostra a Figura 39.

Figura 39
Grafo G colorido
v7

v4 v5

v6
v2 v1

v3
Fonte: Elaborada pelo autor.

Seja uma k-coloração a um grafo G = (V, A) e sejam V1, V2, ..., Vk os subconjuntos
disjuntos de V, induzidos pela k-coloração, então, cada Vi é um conjunto indepen-
dente de vértices de G. Assim, para determinar uma coloração mínima de G, pode-
-se particionar o conjunto V em um número mínimo de conjuntos independentes
de vértices, sendo que cada um desses conjuntos receberá uma cor.

Considerando o grafo G = (V, A), o grau máximo de G, denotado por ∆(G), é o


grau do vértice que possui o maior grau em G, isto é, ∆(G) = max{ grau(v) | v ∈ V }.

Pode-se observar que sempre é possível colorir um grafo G com ∆(G)+1 cores. Isso
porque, se os vértices possuem grau no máximo ∆(G), usa-se uma cor para o próprio
vértice e ∆(G) cores para os adjacentes. Mesmo para grafos completos, Kn possui ∆(G)
= n – 1, o que significa que são necessárias n cores para colori-lo.

Assim, há um limite para o número cromático, em qualquer grafo, dado por


χ(G) ≤ ∆(G)+1.

O próximo teorema foi enunciado pelo matemático inglês Rowland Leonard


Brooks (1916-1993) em 1941, e dá uma relação do melhor que a apresentada ante-
riormente, entre o número cromático e o grau máximo de um grafo.

Teorema 6

Teorema de Brooks (1941)

Seja um grafo simples conexo G e seja ∆(G) ≥ 3. Se G não é um grafo completo (Kn)
e não possui ciclos ímpares (com um número ímpar de vértices), então, χ(G) ≤ ∆(G).

O Teorema de Brooks é um resultado importante, pois dá um limite melhor para


o número cromático χ(G) de um grafo, com ∆(G) como seu grau máximo. Em suma,

114 Teoria dos Grafos


dado um grafo G que atende algumas condições (∆(G) ≥ 3, não ser Kn, nem ter ciclos
ímpares), o número cromático será sempre menor ou igual ao seu grau máximo.

Outro resultado importante da coloração de grafos é o Teorema das Quatro


Cores, conjecturado por Francis Guthrie em 1952, provado pelo matemático
estadunidense Kenneth Appel (1932-2013) e pelo matemático alemão Wolfgang
Haken (1928-) em 1976. Este também foi o primeiro teorema matemático provado
com o auxílio de um computador.

Teorema 7

Teorema das Quatro Cores, Appel e Haken

Todo grafo planar é 4-colorível.

Este teorema indica que qualquer grafo planar pode ser colorido com quatro co-
res. Mas decidir se um grafo planar é 3-colorível é um problema difícil (NP-Completo).

Há várias aplicações para coloração em grafos; um exemplo é a aplicação de


coloração em grafos para o controle de tráfego aéreo (BARNIER; BRISSET, 2004). O
objetivo é evitar o congestionamento e o cruzamento entre voos que trafegam na
mesma altura, modelando os cruzamentos dos voos. Cada voo é modelado como
um vértice e cada cruzamento como uma aresta entre dois voos. Uma coloração,
nesse grafo, determina a distribuição de diferentes alturas, isto é, cada cor uma
altura que deve ser atribuída ao voo, garantindo a segurança nos cruzamentos.

CONSIDERAÇÕES FINAIS
Neste capítulo foram estudados outros problemas em grafos, os conceitos de cli-
que, conjunto estável de vértices e o problema da clique. Também foi abordado o
conceito de cobertura, tanto de arestas quanto de vértices, bem como sua aplicação.
A planaridade do grafo também foi explorada, expondo os teoremas que dão base ao
estudo. Por fim, o problema da coloração de grafos foi apresentado, assim como seus
teoremas e um exemplo de aplicação.

ATIVIDADES
1. Enumere todas as cliques com tamanho maior ou igual a 2 do grafo a seguir.
v2 v4

v3

v1 v5

Problemas em Grafos 115


2. Dê a clique máxima do grafo a seguir.
v3

v2
v4 v1

v7 v5

v6

3. Seja o grafo K3,3. desenhe o grafo e dê uma cobertura de arestas.

4. Considerando um grafo planar com oito vértices, qual o limite máximo de arestas
que esse grafo contém?

5. Utilizando o Teorema de Kuratowski, prove que o grafo a seguir não é planar.


v1

v5 v2

v8 v6

v4 v7 v3

6. Dado o grafo a seguir, encontre a uma coloração mínima e dê seu número


cromático.
v5 v6

v2 v3

v8 v7

v1 v4

116 Teoria dos Grafos


REFERÊNCIAS
AUSLANDER, L; PARTER, S. On imbeddings graphs in the plane, J. Math and Mech, v. 10, n. 3, p. 517-523,
1961.
BARNIER, N.; BRISSET, P. Graph Coloring for Air Traffic Flow Management. Annals of Operation Research, n.
130, p.163-178, 2004.
GOLDBARG, M. C.; GOLDBARG, E. Grafos: conceitos, algoritmos e aplicações. Rio de Janeiro: Elsevier, 2012.
GOLDSTEIN, A. An efficient and constructive algorithm for testing whether a graph can be embedded in a
plane. Graph and Combinatorics Conference, Dept. Math., Princeton University, p. 16-18, 1963.
HOPCROFT, J; TARJAN, R. Efficient planarity testing. Journal of the Association for Computing Machinery, v. 21,
n. 4, p. 549-568, 1974.
NICOLETTI, M. C.; HRUSCHKA Jr, E. R. Fundamentos da teoria dos grafos para computação. São Paulo: Editora
LTC, 2018.
RHODES, N. et al. CLIP: similarity searching of 3D databases using clique detection. Journal of Chemical
Information and Computer Sciences, v. 43, n. 2, p. 443–448, 2003.
SANTOS, E. L. S. Planaridade em grafos: o teorema de Kuratowski. São Cristóvão, 2017. Dissertação(Mestrado
em Matemática) – Universidade Federal de Sergipe.
SZWARCFITER, J. L. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.
SZWARCFITER, J. L.; FIGUEIREDO, C. M. H. de F. Emparelhamento em Grafos: Algoritmos e Complexidade.
Jornada de Atualização em Informática (JAI). Rio de Janeiro. 1999.
ZUGE, A. P. Algoritmos para o problema da clique máxima: análise e comparação experimental. Curitiba,
2017. Tese (Doutorado em Ciência da Computação) – Universidade Federal do Paraná.

Problemas em Grafos 117


GABARITO

1 Introdução ao estudo dos grafos


1. Pelo teorema de Euler (1736), o teórico provou que para um grafo ser euleriano
todos os seus vértices precisam ter grau par. Assim, uma solução possível é dada
pela figura a seguir. As pontes (arestas) adicionadas estão tracejadas e são a8, a9 e a10.
v1

a8

a1 a7 a4

a9

v2 a5 v4

a2 a6 a3

a10
v3

E um possível ciclo euleriano, partindo de v1 é: a1, a2, a10, a3, a6, a5, a9, a7, a4, a8.

2. Uma representação geométrica possível é:

1 3

4 2

118 Teoria dos Grafos


3. A matriz de adjacências é uma matriz contendo todos os vértices nas linhas e
colunas. Coloca-se 1 se os vértices são adjacentes e 0 caso contrário. Assim, a
matriz de adjacências é:
1 2 3 4 5 6
1 0 0 1 1 1 0
2 0 0 1 1 1 0
3 1 1 0 0 1 0
4 1 1 0 0 1 0
5 1 1 1 1 0 0
6 0 0 0 0 0 0

4. Sim, o grafo é bipartido, portanto, seus vértices podem ser separados em dois
conjuntos: V1 = {1, 2, 4, 5} e V2= {3, 6}, tal que não existe aresta entre os vértices
de V1, nem de V2, e toda aresta conecta um vértice de V1 com um vértice de V2.
Colorindo diferentemente os dois conjuntos, tem-se o grafo a seguir.
2 3

1 4

6 5

5. O grau de um grafo é dado pela soma do grau de seus vértices, nesse caso: 5+2+2+2+2+1
= 14. Como o grau de um grafo é o dobro do número de arestas, esse grafo possui sete
arestas. Uma possível representação é dada pela figura a seguir:
v2 v3

v1 v4

v6 v5

2 Conectividade
1. As componentes conexas de um grafo são seus subgrafos maximais – que não
estão contidos em outros grafos – conexos. Assim, no grafo apresentado tem-se
duas componentes conexas:

Gabarito 119
v1 v2 v4

v5

v3 v6

2. Sendo um digrafo, o caminho deve seguir as orientações das arestas. Portanto um


caminho entre v3 e v4 é: (v3, v6), (v6, v2), (v2, v5), (v5, v4), representado na figura a seguir.

v1 v2

v5

v3 v6

v4

3. Um ciclo euleriano é um caminho que inicia e termina no mesmo vértice que passa
por todas as arestas do grafo somente uma vez. Assim, no grafo apresentado um
ciclo euleriano é: (v1, v3), (v3, v5), (v5, v4), (v4, v2), (v2, v1), (v1, v5), (v5, v2), (v2, v3), (v3, v4), (v4, v1)

4. Um grafo semi-hamiltoniano é um grafo que possui um caminho hamiltoniano,


mas não um ciclo hamiltoniano. Assim, basta adicionar uma aresta entre o término
e a origem de um caminho hamiltoniano.
No caso do grafo apresentado, o caminho hamiltoniano é: (v1, v3), (v3, v4), (v4, v2).

Desse modo, basta adicionar a aresta (v2, v1) e o grafo se torna hamiltoniano com o
seguinte ciclo hamiltoniano: (v1, v3), (v3, v4), (v4, v2), (v2, v1).

O grafo fica:

v1 v3

v2

v4

5. Um subgrafo induzido G’ sobre um grafo G é aquele em que, dados todos os


vértices pertencentes a G’, todas as arestas em G sobre estes vértices também

120 Teoria dos Grafos


são arestas em G’. Assim, o subgrafo a seguir é um subgrafo induzido do grafo
apresentado no enunciado da questão.
v5

v1

v2

6. As componentes biconexas, ou blocos de um grafo, são os subgrafos maximais


biconexos em vértices – isto é, não possui articulações – ou isomorfos a K2. Assim,
as componentes biconexas ou blocos do grafo apresentado são:
v6
v7
v3 v6
v1 v6
v2 v8

v7 v8
v2 v2
v4

3 Caminho mínimo e árvores geradoras


1. A árvore de busca em profundidade resultante é:
v1

v6 v2

v5 v3

v4

2. A árvore de busca em largura resultante é:


v1

v6 v2

v5 v3

v4

Gabarito 121
3. A árvore geradora mínima obtida pelo algoritmo de Prim é:
v1

3
v6 2 v2

5 3

v5 v3

1
v4

4. A árvore geradora mínima obtida pelo algoritmo de Kruskal é:


v1

3
v6 2 v2

5 3

v5 v3

1
v4

5. Para melhor entendimento, os rótulos e as distâncias estão assinalados no grafo


a seguir.
0 0
v1

3 2
V1 4
V1 3 v6 2 v2

5 3 4

V6 8 V6 6
v5 v3
10
1
v4

V5 9

4 Grafos eulerianos e hamiltonianos


1. Partindo da terra, as escolhas são:
• Terra → Calisto: 3,1 anos
• Calisto → Io: 0,8 anos

122 Teoria dos Grafos


• Io → Ganímedes: 1,1 anos
• Ganímedes → Mimas: 5,7 anos
• Mimas → Titan: 0,6 anos
• Titan → Terra: 8,1 anos

Total de 19,4 anos de expedição.

2. A busca gulosa com repetição calcula um ciclo hamiltoniano iniciando de cada


vértice e escolhe o menor. Os ciclos encontrados são:
• Terra → Calisto → Io → Ganímedes → Mimas → Titã → Terra: 19,4 anos
• Calisto → Io → Ganímedes → Terra → Titã → Mimas → Calisto: 19 anos
• Io → Calisto → Ganímedes → Terra → Titã → Mimas → Io: 18,9 anos
• Ganímedes → Io → Calisto → Terra → Titã → Mimas → Ganímedes: 19,4 anos
• Mimas → Titã → Io → Calisto → Ganímedes → Terra → Mimas: 19,4 anos
• Titã → Mimas → Io → Calisto → Ganímedes → Terra → Titã: 18,9 anos

Assim, escolhe-se um dos ciclos de 18,9 anos, por exemplo:


• Io → Calisto → Ganímedes → Terra → Titã → Mimas → Io: 18,9 anos.

Rearranjado para iniciar na Terra:

Terra → Titã → Mimas → Io → Calisto → Ganímedes → Terra.

3. O caminho euleriano é dado pelas seguintes arestas:


(v1, v8), (v8, v2), (v2, v7), (v7, v5), (v5, v6), (v6, v7), (v7, v3), (v3, v5), (v5, v4), (v4, v3), (v3, v2), (v2, v1)

4. O Teorema de Ore afirma que se o grafo possui mais de 3 vértices e para todo par
de vértices não adjacentes a soma de seus graus for maior ou igual ao número de
vértices, então, o grafo é hamiltoniano.
Assim, se as condições do teorema forem satisfeitas, garante-se um grafo
hamiltoniano.

O grafo G possui 6 vértices (que é maior ou igual a 3, conforme condição). Não é


informado quais vértices são adjacentes, mas como todos têm grau igual a três,
a soma dos graus de quaisquer pares de vértices é igual a 6. Para os vértices não
adjacentes, a soma de seus graus também é 6, atendendo à outra condição do
teorema.

Portanto, o grafo G é hamiltoniano.

5. O grafo G não é euleriano. O Teorema de Euler atesta que o grafo ter grau par em
todos os vértices é uma condição necessária e suficiente para ser euleriano.
O grafo G apresentado possui os vértices v1 e v2 com grau ímpar, portanto, não é
euleriano.

5 Problemas em Grafos
1. Uma clique é um subconjunto de vértices que induz o subgrafo completo do grafo
original. No grafo apresentado tem-se 12 cliques, oito de tamanho 2 e quatro
cliques de tamanho 3, a saber:
• {v1, v2}
• {v2, v4}

Gabarito 123
• {v4, v5}
• {v1, v5}
• {v1, v3}
• {v2, v3}
• {v3, v4}
• {v3, v5}
• {v1, v2, v3}
• {v1, v3, v5}
• {v2, v3, v4}
• {v3, v4, v5}

2. A clique máxima nesse grafo é {v2, v7, v5, v4}, que induz a um subgrafo K4. Observe
a seguir o grafo apresentado com as arestas adjacentes aos vértices da clique em
tracejado.
v3

v2
v4 v1

v7 v5

v6

3. Grafo K3,3:
v1 v2 v3

v4 v5 v6

Uma cobertura de arestas é: {(v1, v4), (v2, v5), (v3, v6)} e pode ser vista em tracejado a
seguir.

v1 v2 v3

v4 v5 v6

124 Teoria dos Grafos


4. Pelo Corolário 5.2, um grafo planar tem seu número de arestas limitado pela
seguinte fórmula: a ≤ 3n – 6. Assim, um grafo planar, contendo oito vértices, possui,
no máximo, 18 arestas.

5. O Teorema de Kuratowski afirma que um grafo é planar, se, e somente se, não
possuir um subgrafo homeomorfo a K5 ou K3,3.
Como se quer provar que o grafo não é planar, para conseguir um subgrafo pode-se
remover arestas ou vértices até encontrar um grafo homeomorfo a K5 ou K3,3.

Para o grafo em questão, removem-se as arestas (v8, v6) e (v1, v7), obtendo-se o
seguinte grafo:

v1

v5 v2

v8 v6

v4 v7 v3

Esse grafo é homeomorfo a K5 e isso pode ser observado, pois, se forem removidas
as séries 1) (v4, v8), (v8, v5); 2) (v4, v7), (v7, v3); e 3) (v2, v6) e (v6, v3), obtém-se exatamente
o K5, como pode ser observado no grafo a seguir, provando que o grafo original
não é planar.

v1

v5 v2

v4 v3

6. O número cromático do grafo é 2, pois é possível usar, no mínimo, duas cores para
colori-lo. A seguir tem-se o resultado da aplicação da coloração no grafo.
v5 v6

v2 v3

v8 v7

v1 v4

Gabarito 125
TEORIA DOS GRAFOS
Razer Anthom Nizer Rojas Montaño

Fundação Biblioteca Nacional

Razer Anthom Nizer Rojas Montaño


Código Logístico
ISBN 978-85-387-6636-0

59398 9 788538 766360

Você também pode gostar