Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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
2 Conectividade 34
2.1 Grafos conexos e componentes 34
2.2 Caminhos e circuitos 36
2.3 Subgrafos 40
2.4 Cortes 42
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.
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
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
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.
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.
A = {(v1, v2), (v2, v3), (v2, v4), (v4, v5), (v2, v5), (v4, v4), (v1, v2)}
Figura 1
Grafo G
v2
v3
v1 v5
v4
Tal que: a1 = (v1, v2 ), a2 = (v2, v3 ), a3 = (v2, v4), a4 = (v4, v5), a5 = (v2, v5), a6 = (v4, v4), a7 = (v1, v2)
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.
Figura 3
Grafos completos
v2
v2 v2 v1 v2
v1 v3
v1 v1 v3 v4 v3 v4 v5
Figura 4 v2
Grafo completo
v1 v3
v4 v5
Fonte: Elaborada pelo autor.
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.
Figura 7
Grafo simples
v2
v3
v1 v5
v4
Fonte: Elaborada pelo autor.
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.
v2 v2
v3 v3
v1 v5 v1 v5
v4 v4
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.
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.
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.
Figura 18
Grafo G com arestas
v2
a5
v3
a4 a1
a2
v1 v5
a3
v4
Fonte: Elaborada pelo autor.
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.
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.
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.
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.
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.
Figura 20
Grafo subjacente
v2
3 10
v3
20
8
5
v1 v5
1
v4
1
Fonte: Elaborada pelo autor.
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.
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.
|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:
Figura 23
Grafo G
v2
a3 v3
a4
a2
v1
a1
v4
Fonte: Elaborada pelo autor.
v2
a3 v3 a3 a4
a4
a2
v1
a1
v4
a1 a2
Figura 25
Primeiro vértice de L (G)
v2
a3 v3 a3 a4
a4
a2
v1
a1
v4
a1 a2
Fonte: Elaborada pelo autor.
Figura 26
Segundo vértice de L (G)
v2
a3 v3 a3 a4
a4
a2
v1
a1
v4
a1 a2
Fonte: Elaborada pelo autor.
Figura 27
Terceiro vértice de L (G)
v2
a3 v3 a3 a4
a4
a2
v1
a1
v4
a1 a2
Figura 28
Quarto e último vértice de L (G)
v2
a3 v3 a3 a4
a4
a2
v1
a1
v4
a1 a2
Figura 29
Grafo L(G)
a3 a4
a1 a2
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.
f (a1) = e2
f (a2) = e4
f (a3) = e1
f (a4) = a3
Tal que:
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.
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)
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.
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
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.
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
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.
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.
(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.
Quadro 1
Tempo de execução da solução simples para o TSP.
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.
Figura 39
Malha elétrica
t2
t7
t3
t1
t5
t8
t4
t6 t9
Fonte: Elaborada pelo autor.
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.
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
v1
v2 v4
v3
1 4
6 5
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.
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
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.
Figura 5 v1 v2
Grafo G
v5
v3
v4
v6
Fonte: Elaborada pelo autor.
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.
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.
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.
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.
– 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).
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).
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.
v1
Fonte: Elaborada pelo autor.
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
Figura 21
Grafo G’’
v2 v5
v1 v4 v6 v8
v3 v7
v2 v5
v1 v4 v6 v8
v3 v7
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.
Figura 23
Grafo G
v2 v3 v5
v1 v4 v6
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|.
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.
Figura 27
Bloco do grafo
v2 v5 v7
v1 v3 v4 v6 v6 v8
v3 v4
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
Figura 28
Mapa de tráfego da Rede Ipê
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
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.
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
v5
v3 v6
v4
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
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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).
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.
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
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.
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 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.
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.
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 ∞.
10
1 2
v1
6
0 0
8
3
v3 v5
0 ∞ 0 ∞
Fonte: Elaborada pelo autor.
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}.
10 varre-se todos os vértices adjacentes a v4, nesse caso, {v2, v3, v5}.
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 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-
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)}.
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
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
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
3 4
v6 2 v2
5 4
3
v5 v3
10
1
v4
3 4
v6 2 v2
5 4
3
v5 v3
10
1
v4
3 4
v6 2 v2
5 4
3
v5 v3
10
1
v4
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.
Figura 3
Grafo com caminho euleriano
v3
v2
v4
v6
v1
v7 v5
v3
a8
v2
a7
a3
v4
a1
a4
v6
a2
v1 a6
a5
v7 v5
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.
v5 a6 v4
a10 a4 a7
v7 a5 v6 v3
a3
a8
a9 a2
v1 a1 v2
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.
v3
v2
v4
v6
v1
v7 v5
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.
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.
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.
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.
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}.
Assim, pela hipótese de indução, cada G’i, tal que i = 1, 2, ..., l, possui um ciclo
euleriano, denotado aqui como Ti.
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.
Algoritmo 1
Algoritmo de Hierholzer
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.
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.
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
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.
Figura 10
Solução para o jogo icosiano
Figura 11
Ciclo hamiltoniano para a
solução do jogo icosiano
Teorema 3
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.
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
... ...
v1 v2 vi-1 vi vn-1 vn
... ...
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
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
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.
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.
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.
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.
Figura 18
Grafo com ciclos hamiltonianos
v1
185
133 119
v2
200
v5
152
121
150
120
199
v3
174
v4
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:
Não é o ciclo ideal, mas está mais perto, sendo, portanto, uma solução satisfató-
ria que pode ser calculada em tempo hábil.
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?
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
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.
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.
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
Assim, um grafo possui uma clique se possuir um subgrafo completo, por exem-
plo, o grafo G apresentado na Figura 3.
• {v2, v3}
• {v3, v4}
• {v4, v5}
• {v1, v5}
v1 v5
• {v2, v4}
Fonte: Elaborada pelo autor.
• {v2, v3, v4}
Figura 4
Grafo com algumas cliques destacadas
v3
v2 v4
v1 v5
Figura 5
Cliques de G separadas
v3 v3
v1 v5 v4 v2 v4
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.
Figura 9
Conjuntos independentes de vértices de G: {v1, v4}, {v3, v5} e {v1, v3, v5}
v4 v3 v3
v1 v5 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.
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.
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.
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).
Figura 18
Grafo I
v1
v5
v6
v4
v2
v3
Fonte: Elaborada pelo autor.
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.
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.
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.
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.
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.
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.
Teorema 1
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
Esse resultado é muito importante, pois coloca um limite numérico em, pelo
menos, um dos vértices do grafo planar.
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.
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.
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.
Teorema 2
Teorema Kuratowsk
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
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
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.
Teorema 3
Se um grafo G tem n vértices, então, χ(G) ≤ n.
Teorema 4
Figura 34 Figura 35
Grafo K5 Grafo K5 colorido
v1 v1
v5 v2 v5 v2
v4 v3 v4 v3
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
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.
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.
Figura 38
Grafo G
v7
v4 v5
v6
v2 v1
v3
Fonte: Elaborada pelo autor.
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.
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.
Teorema 6
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).
Teorema 7
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).
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
v2
v4 v1
v7 v5
v6
4. Considerando um grafo planar com oito vértices, qual o limite máximo de arestas
que esse grafo contém?
v5 v2
v8 v6
v4 v7 v3
v2 v3
v8 v7
v1 v4
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.
1 3
4 2
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
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)
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
v1
v2
v7 v8
v2 v2
v4
v6 v2
v5 v3
v4
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
3
v6 2 v2
5 3
v5 v3
1
v4
3 2
V1 4
V1 3 v6 2 v2
5 3 4
V6 8 V6 6
v5 v3
10
1
v4
V5 9
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.
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
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