Você está na página 1de 186

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DA BAHIA - IFBA

MATEMÁTICA DISCRETA II
Com Foco em Linguagem Python

Allan de Sousa Soares


Edson Patricio Barreto de Almeida

Vitória da Conquista - BA
2022
Sumário

1 Introdução ao Estudo de Grafos 9


1.1 Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2 Terminologia e Definições Básicas 17


2.1 Grafos Não Orientados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 Grafos Orientados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3 Grafos Especiais e Grafos Construı́dos a Partir de Outros Grafos 25


3.1 Grafos Usuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Grafo Bipartido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3 Grafos a Partir de Outros Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.6 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4 Representação de Grafos 33
4.1 Representação Por Lista de Adjacências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 Representação Matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.1 Matrizes de Adjacência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.2 Matrizes de Incidência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

5 Isomorfismo de Grafos 42
5.1 Condições Para a Existência do Isomorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.4 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

1
6 Caminhos e Aplicações 48
6.1 Caminhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.2 Caminhos e Isomorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.3 Contando Caminhos Entre Vértices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.5 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.6 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

7 Conectividade 55
7.1 Conectividade em Grafos Não-Orientados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.2 Quão conexo é um Grafo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.3 Conectividade em Grafos Orientandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.5 Respostas do Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.6 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

8 Circuito e Caminho de Euler 62


8.1 Circuito e Caminho de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.2 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.3 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.4 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

9 Circuito e Caminho de Hamilton 69


9.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
9.2 Resultados Sobre a Existência de Circuitos de Hamilton . . . . . . . . . . . . . . . . . . . . . . . . . . 69
9.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
9.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
9.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

10 O Problema do Caminho Mais Curto 73


10.1 Algoritmo Para a Determinação do Caminho Mais Curto . . . . . . . . . . . . . . . . . . . . . . . . . 73
10.2 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
10.3 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
10.4 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

11 Grafos Planares 80
11.1 Problematizando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
11.2 Condições Para a Planaridade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
11.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
11.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
11.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

12 Coloração de Grafos 88
12.1 Problematizando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
12.2 Coloração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
12.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

2
12.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
12.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

13 Introdução ao Estudo de Árvores 94


13.1 Árvores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
13.2 Árvores Enraizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
13.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
13.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
13.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

14 Propriedades das Árvores 101


14.1 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
14.2 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
14.3 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

15 Pesquisa Binária e Árvores de Decisão 107


15.1 Árvore de Busca Binária . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
15.2 Árvores de Decisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
15.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
15.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
15.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

16 Travessia de Uma Árvores 114


16.1 Sistema de Endereçamento Universal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
16.2 Algoritmos de Travessia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
16.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
16.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
16.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

17 Aplicação dos Processos de Travessia no Cálculo de Expressões Algébricas 122


17.1 Notação Prefixa, Infixa e Pós-fixa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
17.2 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
17.3 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
17.4 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

18 Árvores Geradoras 128


18.1 Problematizando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
18.2 Busca em Profundidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
18.3 Busca em Largura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
18.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
18.5 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
18.6 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

19 Árvores Geradoras Mı́nimas 137


19.1 Problematizando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
19.2 Algoritmos Para Árvores Geradoras Mı́nimas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
19.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

3
19.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
19.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

20 Anexos: Programas em Python 143

4
Surgimento da Teoria dos Grafos

A teoria dos grafos é um ramo da matemática que estuda certas relações entre objetos de um determinado con-
junto. Para tanto associamos os elementos deste conjunto a pontos denominados vértices e, as relações existentes entre
eles por meio de arestas os ligando. Em certo sentido, “desenhamos a situação”.

O Problema das Sete Pontes de Konigsberg


No século 13, um enigma mobilizou uma pequena cidade localizada ao norte da Europa. Tratava-se do desafio das
sete pontes de Königsberg, atual Kaliningrado. Seis delas interligavam duas ilhas às margens do Rio Pregel e uma que
fazia a ligação entre as duas ilhas (veja a Figura 1). O problema consistia na seguinte questão: “como seria possı́vel
fazer um passeio a pé pela cidade de forma a se passar uma única vez em cada uma das sete pontes e retornar ao
ponto de partida?” Havia-se tornado uma lenda popular a possibilidade da façanha quando Euler, em 1736, provou
que não existia caminho que possibilitasse tais restrições.

Figura 1: Esboço das Sete Pontes de Konigsberg.

Mais de um século século mais tarde Listing introduzia o conceito de topologia ao passo que Cayley foi levado por
um interesse em formas analı́ticas particulares decorrentes do cálculo diferencial para estudar uma classe particular
de grafos, as árvores. Esse estudo teve diversas implicações na quı́mica teórica.
Um outro problemas amplamente conhecido na teoria dos grafos é problema das quatro cores: “É possı́vel que
qualquer mapa desenhado num plano, dividido em regiões, possa ser colorido com apenas quatro cores de tal forma
que as regiões vizinhas não partilhem a mesma cor?”. O primeiro a notar o problema das quatro cores foi August
Ferdinand Möbius em 1840. Em 1852, Francis Guthrie escreveu em uma carta para seu irmão Frederick, estudante na
University College London, sobre o problema. Mas nenhum deles conseguiu resolvê-lo. Sua prova se deu somente em
1976 que Kenneth Appel e Wolfgang Haken conseguiu demonstrá-lo.
Atualmente a teoria dos grafos permeia os mais diversos ramos da ciência. Por meio de ferramentas relativa-
mente simples, provenientes desta, problemas como a determinação de rotas que minimizam custos, arvores mı́nimas,
segurança de redes de computadores entre outros problemas são, em boa parte, resolvidos com boa eficiência.

5
Organização Deste Material e Algumas
Outras Dicas

A organização do conteúdo deste material foi cuidadosamente pensada para promover um aprendizado significativo
acerca dos assuntos abordados. Aqui seguem algumas dicas de como usá-lo:
1. Teoremas e definições são, em geral seguidos de exemplos. Leia atentamente a solução dos exemplos, vejam
como são empregados definições e teoremas bem como o jargão da matéria. Note que a solução não é simplesmente
apresentar um cálculo, mas sim apresentar a explicação passo-a-passo da solução do problema proposto.
2. A demonstração de alguns teoremas pode não serem tão simples e até mesmo omitidas no texto. Não se preocupe,
esta é apenas uma matérias introdutória. Nosso foco maior é na utilização prática dos resultados na solução dos
exemplos e exercı́cios tendo em vista uma posterior implementação em linguagem computacional adequada (que
poderá ser feita durante a matéria ou em matérias mais adiante no curso). Contudo, ao entendermos a demonstração
de um teorema passamos de “somente aceitar o resultado”para “acreditarmos que o mesmo é de fato verdadeiro”.
3. Ao longo do texto são expostos alguns algoritmos tendo em vista o foco computacional da matéria para cursos
como Sistemas de Informação e Ciência da Computação. Aprender a matéria sem a preocupação de implementar
somente para mim que sou professor de matemática hehehe.
4. Nos tópicos Palavra do Mestre costumo “esticar” a explicação de alguns pontos que julgo importantes para o
leitor.
5. Nos tópicos Revisando relembro alguns conceitos muito provavelmente já vistos pelo leitor bem como alguns
outros fora do escopo principal da matéria mas que aparecem vez ou outra no texto.
6. Ao final de cada capı́tulo, na versão digital (PDF), o leitor encontrará Links de videoaulas referentes aos assuntos
abordados.
7. A final deste livro são apresentados alguns programas, em linguagem Python 3, referentes a alguns tópicos
estudados. Da minha parte não há qualquer pretensão em ensinar a programar, sou professor de matemática e ponto
final. Contudo, sou um grande entusiasta da programação e, sendo esta matéria com foco em cursos de Sistema
de Informação e Computação decidir incluir algumas codificações ao final. Os programas, em sua maioria, estão
presentes nos endereços eletrônicos disponı́veis em [10] e [11]. Para a compilação dos códigos usamos a plataforma
online OnlineGDBBeta : Linguagem Python 3.
Muito do que será exposto nas próximas páginas é fundamentado em [1](Veja a referência Principal), principal-
mente teoremas e definições. O leitor interessado pode tentar obter tal obra a fim de ter um material completo e muito
bem escrito sobre o tema.
Por fim, a produção deste material, bem como todos os materiais didáticos que elaboramos enquanto professores
do Instituto Federal de Educação, Ciência e Tecnologia da Bahia não tem qualquer pretensão financeira. Seu único
objetivo é a difusão do conhecimento. Ele pode ser copiado, reproduzido e melhorado à vontade.
Email para sugestões: allansoares007@gmail.com

6
Agradecimentos

Agradeço primeiramente a Deus por me iluminar na confecção deste material. Em segundo ao Professor Edson
Patrı́cio Barreto de Almeida pelas importantes contribuições dadas. Por fim, ao aluno Rafael Dutra Pereira (BSI)
pelas correções feitas enquanto cursava a disciplina Matemática Discreta II no ano de 2020.

7
Plano de Aula
Aula 1
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Introdução ao Estudo de Grafos
Duração: 100 min
Objetivos:
- Definir grafo;
- Apresentar alguns tipos de grafos especiais;
- Relacionar grafos com aspectos presentes no cotidiano.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

8
Capı́tulo 1

Introdução ao Estudo de Grafos

1.1 Grafos
Fique atento a cada definição exemplo deste capı́tulo. Eles serão a base para tudo que desenvolveremos ao longo
do curso.

Definição 1. Um grafo G = (V, E) consiste de um conjunto não vazio de vértices V e um conjunto de arestas E.
Cada aresta liga um ou dois vértices chamados pontos finais um do outro.

Exemplo 1. A Figura 1.1 apresenta dois grafos G e H como redes hipotéticas entre centrais de dados de algumas
cidades.

Figura 1.1: Redes de Centrais de Dados

Note que G representa uma rede com link único entre centrais. Por outro lado H admite múltiplos links entre algumas
de suas centrais de dados. A rede representada por H me parece mais segura!

A teoria dos grafos nos permite detalhar bastante algumas situações por meio de desenhos. Nesta primeira parte
apresentaremos alguns exemplos para nos motivar a estudar a teoria. Em capı́tulos futuros apresentaremos algumas
ferramentas extremamente úteis que podem ser facilmente aplicadas em diversas situações. Entre algumas situações
interessantes temos, por exemplo: Como o Uber escolhe a trajetória de melhor custo benefı́cio para ambos os lados,
motorista e usuário? Como as rotas de uma empresa de logı́stica podem ser modeladas de modo a apresentarem um
menor custo em suas viagens?

Exemplo 2. Poderı́amos adicionar links de backup a algumas das centrais de dados no grafo H do Exemplo 1 conforme
mostrado na Figura 1.2.

9
Figura 1.2: Rede de Centrais de Dados com Múltiplos Links e Pontos de Backup

Arestas que ligam um vértice a ele próprio são chamadas de loops. No exemplo atual temos loops nos vértices Goiás
e Salvador representando pontos de backup. Bom salvar dados importante em um pendrive!

Se só existir, para cada par de vértices, uma única arestas os conectando, e o for dessa forma para todos os vértices
de um grafo ele será chamado grafo simples (Grafo G na Figura 1.1). Do contrário, se existirem vértices conexos por
mais que uma aresta dizemos tratar-se de um grafo múltiplo ou multigrafo (Grafo H na Figura 1.1).

Definição 2. Um grafo orientado (ou digrafo) (V, E) consiste de um conjunto não vazio de vértices V e um conjunto
de arestas orientadas (ou arcos) E. A aresta orientada associada ao par (u, v) é dita começar em u e terminar em v

Exemplo 3. Podemos ainda impor orientações às arestas de um grafo. Neste caso, nossa rede entre centrais de
dados poderia ter a seguinte configuração conforme a Figura 1.3: Podemos imaginar que uma seta com orientação

Figura 1.3: Rede de Centrais de Dados Orientada

que parte de uma cidade a para uma cidade b signifique que a cidade a envie dados para a cidade b. Por exemplo, a
cidade de Belo Horizonte pode enviar diretamente dados para a cidade de São Paulo mas não o inverso. Contudo, a
informação poderia seguir um caminho, digamos São Paulo, Salvador, Rio de Janeiro e por fim chegar a Belo Horizonte.
Considerando o grafo G1 , Goiânia não pode receber dados de nenhuma das demais cidades (direta ou indiretamente).
Seria bom alguém ver isso!.

Exemplo 4. Ainda com base nos exemplos precedentes poderı́amos ter um multigrafo com arestas orientadas (grafo
G2 ) ou até mesmo um multigrafo contendo pontos de backup (grafo H2 ) conforme a Figura 1.4:
Observe que, em ambos grafos G2 e H2 uma informação pode, a partir de uma cidade qualquer, atingir uma outra
cidade qualquer dentre as participantes da rede de centrais de dados.

10
Figura 1.4: Rede de Centrais de Dados Orientada com Múltiplos Links

Nossa abordagem, em grande parte, se restringirá aos grafos simples com ou sem arestas orientadas. Neste caso,
pouco ou quase nada abordaremos a respeito de grafos com múltiplas arestas ou com loops. Isto não quer dizer que a
teoria não se encaixe. Com alguns ajustes situações em que não se tenha um grafo simples podem ser tratadas com a
teoria apresentada.
A Tabela 1.1 apresentada a seguir estabelece um resumo para que possamos facilmente identificar um grafo quanto
à sua tipologia assim que o virmos.

Tipo Arestas Múltiplas Arestas? Loops?


Grafo Simples Não Orientado Não Não
Grafo Múltiplo Não Orientado Sim Não
Pseudografo Não Orientado Sim Sim
Grafo Simples Orientado Orientado Não Não
Grafo Múltiplo Orientado Orientado Sim Sim
Grafo Misto Orientado e Não Orientado Sim Sim

Tabela 1.1: Resumo da Terminologia.

1.2 Modelos
Vejamos a seguir alguns modelos para situações práticas da vida real. Ao final dos exemplos apresentados nesta
seção você irá notar que a quantidade de situações que se pode modelar por meio da teoria dos grafos é enormemente
assustadora. Aconselhamos ao leitor buscar mais destas situações em livros, internet e até mesmo ensaiar algumas.

Exemplo 5. Grafos de Amizade e Relacionamento


Podemos usar um grafo para representar se duas pessoas se conhecem, isto é, se estão familiarizadas ou se são amigas.
Cada pessoa em um grupo particular de pessoas é representada por um vértice. Uma aresta não orientada é usada
para conectar duas pessoas quando essas pessoas se conhecem ou se são amigos. Não são utilizadas múltiplas arestas
ou loops. A Figura 1.5 apresenta um exemplo de rede de relacionamentos.

11
Figura 1.5: Rede de Amizade e Relacionamento

Exemplo 6. Redes de Influência


Em certo grupo de pessoas de uma empresa foi observado que algumas sofrem influências de certos colegas e são
influenciadoras de outros. Assumimos que uma seta a → b indica que a pessoa a exerce influência sobre a pessoa b. A
Figura 1.6 ilustra tal situação.

Figura 1.6: Grafo de Influência

Observe como uma simples figura nos permite observar quem é o mais influenciador (Amanda), quem é o mais
influenciável (Pedro), indivı́duos com relações de influência mútuas (Pedro-Thiago e Thiago-Ana). Em Amanda
ninguém manda!

Exemplo 7. A Rede Mundial de Computadores

A imagem dispensa qualquer comentário, contudo faremos um. A rede mundial de computadores é considerado um
gigantesco grafo cuja complexidade se dá não somente pela quantidade de máquias conectadas mas também pela
modificabilidade da rede com páginas sendo criadas e outras deletadas a cada momento. De modo sucinto podemos
pensar da seguinte forma. Cada página é representada por um vértice e uma aresta começa na página da Web A e
termina na página da Web B se houver um link para B. Observe que não é o mesmo link que liga duas páginas A e
B, um serve para ir de A para B e o outro para ir de B até A.

12
Figura 1.7: Imagem retirada de https://br.depositphotos.com/29431569

Exemplo 8. Torneios de Eliminação Simples (Mata-Mata)


Trata-se de um campeonato onde cada competidor é eliminado após um confronto de uma ou mais partidas contra
um adversário. Nós podemos modelar tal torneio usando um vértice para representar cada confronto e uma borda
direcionada para conectar um adversário para o próximo confronto em que o vencedor deste confronto jogou. O Figura
1.7 representa os confrontos disputados por 16 equipes finais da libertadores 2019 nas qual o mengão foi campeão.

Figura 1.8: Confrontos da Libertadores 2019

1.3 Exercı́cios
Exercı́cio 1. Desenhe modelos de grafos, indicando o tipo de grafo (Tabela 1.1) usado para representar rotas de uma
empresa de aviação onde todos os dias há três voos de Rio de Janeiro para São Paulo, dois voos de São Paulo a Rio
de Janeiro, um voo de São Paulo para Recife, dois voos de Recife para São Paulo, um voo de São Paulo para Manaus,
um voo de Manaus para São Paulo, dois voos de São Paulo para Porto Alegre, um voo de Porto Alegre para São Paulo

13
e um voo de Porto Alegre para Recife, com
a) uma aresta entre os vértices representando as cidades com voos entre elas (em qualquer direção).
b) uma aresta entre vértices caso haja um voo entre elas indicando a cidade de onde o voo parte e a cidade onde o
voo termina.
c) uma aresta para cada voo a partir de um vértice representando cidade de onde o voo parte para o vértice represen-
tando a cidade onde o voo termina.

Exercı́cio 2. O grafo de interseção de uma coleção de conjuntos é o grafo que tem um vértice para cada um desses
conjuntos e tem uma borda (única) conectando os vértices que representam dois conjuntos se esses conjuntos tiverem
uma interseção não vazia. Construir o grafo de interseção dessas coleções de conjuntos.
a) A = {0, 2, 4, 6}, B = {1, 2, 3, 4}, C = {1, 3, 5, 7, 9}, D = {5, 7, 8, 9}, E = {0, 1, 8, 9}
b) A = {· · · , −4, −3, −2, −1, 0}, B = {· · · , −2, −1, 0, 1, 2, · · · }, C = {· · · , −6, −4, −2, 0, 2, 4, 6, · · · } e
D = {· · · , −5, −3, −1, 1, 3, 5, · · · }.

Exercı́cio 3. Determine se cada um dos grafos 1 − 3 dados seguir possui arestas direcionadas ou não direcionadas,
se tem arestas múltiplas ou não e se apresentam loops ou não. Ao final use suas respostas para determinar o tipo de
grafo tendo em vista a Tabela 1.1.

1.4 Respostas dos Exercı́cios

Resposta do Exercı́cio 1. .

Resposta do Exercı́cio 2. .

Resposta do Exercı́cio 3. 1. Simples; 2. Pseudografo; 3. Multigrafo Orientado.

14
1.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 1. Links das Vı́deo Aulas Referentes ao Capı́tulo 1


Introdução ao Estudo de Grafos
Grafo Orientado
Classificação de Um Grafo
Modelos Gráficos: Grafos de Amizades e Relacionamento e Redes de Influência

15
Plano de Aula
Aula 2
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Terminologia e Definições Básicas.
Duração: 100 min
Objetivos:
- Definir grafo não orientado;
- Apresentar o conceito de vizinhança de um vértice ou conjunto de vértices;
- Apresentar o conceito de grau de um vértice para grafos não orientados;
- Definir grafo orientado;
- Apresentar o conceito de grau de um vértice para grafos orientados;
- Apresentar resultados envolvendo grau de um vértice.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

16
Capı́tulo 2

Terminologia e Definições Básicas

As definições que apresentaremos neste capı́tulo são de fundamental importância para diversos resultados a serem
estabelecidos nos demais capı́tulos. Inúmeros teoremas farão uso da adjacência de um vértice (Definição 3) bem como
o grau de um vértice (Definição 5).

2.1 Grafos Não Orientados


Definição 3. Dois vértices u e v em um grafo não orientado G são chamados adjacentes (ou vizinhos) em G se u e v
são pontos finais de uma aresta e de G. Tal aresta e é chamada incidente com os vértices u e v.

Exemplo 9. Considere o grafo G dado na Figura 2.1:

Figura 2.1: Pseudografo

Note que os vértices a e b são adjacentes, pois existe uma aresta incidente a ambos. Por outro lado, os vértices b e c
não são adjacentes uma vez que não há qualquer aresta incidente a ambos simultaneamente. O vértice e, por exemplo,
não apresenta vértices adjacentes. O vértice c é adjacente a ele mesmo, pois existe um loop em c.

Definição 4. O conjunto de todos os vizinhos de um vértice v de G = (V, E), denotado por N (v), é chamado
vizinhança de v. Se A é um subconjunto de V , denotamos por N (A) o conjunto de todos os vértices em G que são
adjacentes a pelo menos um vértice em A. Assim, N (A) = ∪v∈A N (v).

Exemplo 10. Determine a vizinhança de todos os vértices do grafo G dado na Figura 2.1 (Exemplo 9).
Solução: Observando todas as adjacências de cada um dos vértices (de acordo com a Definição 3) temos: N (a) =
{b, c, d}, N (b) = {a, d}, N (c) = {a, c}, N (d) = {a, b} e N (e) = ∅.

17
Definição 5. O grau de um vértice em um grafo não orientado é o número de arestas incidentes com ele, exceto que
um loop em um vértice contribui duas vezes para o grau desse vértice. O grau do vértice v é denotado por deg(v).

Exemplo 11. Determine o grau de todos os vértices do grafo G dado na Figura 2.1 (Exemplo 9).
Solução: De acordo com a Definição 5 temos que deg(a) = 3 (vértices b, c, d com uma aresta cada um); deg(b) = 3
(vértices a, d sendo o primeiro contribuindo com uma aresta incidente e o segundo com duas); deg(c) = 3 (vértices a,
c, sendo o primeiro contribuindo com uma aresta e o segundo com um loop que vale 2 para efeitos de cálculo de grau);
deg(d) = 3 (vértices a, b sendo o primeiro contribuindo com uma aresta incidente e o segundo com duas); deg(e) = 0,
pois não há qualquer aresta incidente com este.

Teorema 1. Seja G = (V, E) um grafo não orientado com m arestas. Então


X
deg(v) = 2m.
v∈V

(O presente resultado se aplica a todo tipo de grafo não orientado incluindo multigrafos e pseudografos.)

Exemplo 12. Quantas arestas existem em um grafo com 8 vértices de grau seis cada um?
Solução: Temos que a soma dos graus dos vértices é dada por

6 + 6 + · · · + 6 = 6 · 8 = 48

donde segue, do Teorema 1 que, 2m = 48, em que m é o número de arestas. Portanto, tal grafo contém 24 arestas..

Teorema 2. Um grafo não orientado possui um número par de vértices de grau ı́mpar.

Demonstração. Sejam V1 e V2 o conjunto de vértices de graus pares e o conjunto de vértices de graus ı́mpares,
respectivamente, em um grafo não orientado G = (V, E) com m arestas. Então
X X X X X
2m = deg(v) = deg(v) + deg(v) ⇒ 2m = 2k + deg(v) ⇒ deg(v) = 2(m − k)
v∈V v∈V1 v∈V2 v∈V2 v∈V2

Logo, o grafo possui um número par de vértices de grau ı́mpar.

Exemplo 13. É possı́vel desenhar um grafo contendo 5 vértices sendo dois de grau 2, um de grau 3 e dois de grau 1?
Se sim desenhe-o.
Solução: De acordo com o Teorema 2 não é possı́vel pois temos três vértices de grau ı́mpar. Espero que não tenha
começado a desenhar algo que não existe!

O Programa 1, em linguagem Python 3, exibe o grau de um vértice arbitrário.

2.2 Grafos Orientados


A seguir serão repassadas algumas definições e teoremas semelhantes aos anteriores, contudo restritos aos grafos
orientados.

Definição 6. Quando (u, v) é uma aresta do grafo orientado G u é dito ser adjacente a v e v é dito ser adjacente a u.
u é chamado de vértice inicial de (u, v), e v é chamado de vértice terminal ou vértice final de (u, v). O vértice inicial
e o vértice terminal de um loop são os mesmos.

18
Exemplo 14. Considere o grafo G dado na Figura 2.2:

Figura 2.2: Multigrafo Orientado

Note que os vértices a e b são adjacentes com a sendo o vértice inicial da aresta (a, b) e b sendo o vértice final. Os
vértices b e d são adjacentes com b sendo inicial e d sendo final um do outro com relação à aresta (b, d) e vice-versa
com relação à aresta (d, b). Note que c é adjacente a ele mesmo devido ao loop existente nele e desta forma é ponto
final e inicial da aresta (c, c).

Definição 7. Em um grafo com arestas orientadas, o grau de entrada de um vértice v, denotado por deg − (v), é o
número de arestas cujo vértice terminal é v. O grau de saı́da de v, denotado por deg + (v), é o número de arestas cujo
vértice inicial é v. Um loop em um vértice contribui com 1 para tanto o grau de entrada quanto o de saı́da desse
vértice.)

Palavra do Mestre 1. A plataforma Graph Online é uma ótima ferramente no esboço de grafos entre outras
ferramentas bastante úteis para esta disciplina. Praticamente todos os grafos dispostos neste material foram
construı́dos nela.

Exemplo 15. Encontre o grau de entrada e saı́da de cada vértice no grafo orientado G mostradas na Figura 2.3.

Figura 2.3: Grafo orientado G.

Solução: Os graus de entrada em G são deg − (a) = 0, deg − (b) = 3, deg − (c) = 2, deg − (d) = 1, deg − (e) = 0 e
deg − (f ) = 2. Os graus de sáida em G são deg + (a) = 3, deg + (b) = 1, deg + (c) = 1, deg + (d) = 3, deg + (e) = 0 e
deg + (f ) = 0.

Teorema 3. Seja G = (V, E) um grafo orientado. Então


X X
deg − (v) = deg + (v) = |E|.
v∈V v∈V

19
Note que o Teorema 3 nos diz que a soma dos graus de entrada de todos os vértices é igual à soma dos graus de
saı́da de todos os vértices de um grafo orientado.

Exemplo 16. Verifique o Teorema 3 para o grafo G (Figura 2.3) dado no Exemplo 15.
Solução: De fato, temos que
X
deg − (v) = deg − (a) + deg − (b) + deg − (c) + deg − (d) + deg − (e) + deg − (f ) = 0 + 3 + 2 + 1 + 0 + 2 = 8
v∈V
X
deg + (v) = deg + (a) + deg + (b) + deg + (c) + deg + (d) + deg + (e) + deg + (f ) = 3 + 1 + 1 + 3 + 0 + 0 = 8
v∈V

2.3 Exercı́cios
Exercı́cio 4. Considere o grafo não orientado G mostrado na Figura 4:

a) Determine o(s) vizinho(s) de cada um dos vértices a, c e f .


b) Determine a vizinhança de cada um dos conjuntos A = {a, b} e B = {c, d}
c) O grau de cada um dos vértices b, c, d e e.

Exercı́cio 5. Quantos vértices, todos de grau 5, tem um grafo não orientado com 20 arestas?

Exercı́cio 6. Desenhe, se possı́vel, grafos não orientados atendendo as condições solicitadas.


a) grafo de 5 vértices sendo quatro de grau 3 e um de grau 2.
b) grafo de 6 vértices sendo um de grau 1, um de grau 2, três de grau 3 e um de grau 4.
c) grafo de 7 vértices sendo três de grau 2, dois de grau 3, um de grau 4 e um de grau 5.

Exercı́cio 7. Considere o grafo orientado G mostrado na Figura 2.4:


a) Determine o(s) vizinho(s) de cada um dos vértices b, d e g.
b) Determine a vizinhança de cada um dos conjuntos A = {a, d} e B = {c, d, e}
c) O grau de entrada de cada um dos vértices b, c, d e e.
d) O grau de de saı́da de cada um dos vértices a, b, d, e e g.

20
Figura 2.4:

Exercı́cio 8. Construa um grafo orientado consistindo dos vértices a, b, c, d, e tais que:

deg + (a) = deg − (a) = deg + (b) = deg − (b) = deg − (c) = deg + (d) = deg − (d) = deg − (e) = 1, deg + (c) = 2, deg + (e) = 0

Exercı́cio 9. Considere um grafo orientado indicando cada ser vivo e aqueles do qual se alimenta (a relação a → b
indica que o animal a é alimento para o animal b).

a) Determine o grau de entrada e o grau de saı́da dos seguintes participantes da cadeia alimentar: Cupim, Lagarto,
Galinha e Onça.
b) Como você relacionaria o grau de entrada e o de saı́da para determinar o ser superior e o ser inferior na cadeia
alimentar? A resposta desta questão é pessoal e deve ser debatida.
c) Removendo-se a aranha o que se esperaria que acontecesse com o restante da cadeia alimentar em um curto perı́odo
de tempo? A resposta desta questão é pessoal e deve ser debatida.

2.4 Respostas
Resposta do Exercı́cio 4. a) N (a) = {b, d}, N (c) = {b, c, f } e N (f ) = {c, e}; b) N (A) = {a, b, c, d, e}, N (B) =
{a, b, c, d, f }; c) deg(b) = 3, deg(c) = 4, deg(d) = 4 e deg(e) = 4

Resposta do Exercı́cio 5. 8 vértices.

21
Resposta do Exercı́cio 6. .

Resposta do Exercı́cio 7. a) N (b) = {a, c, e}, N (d) = {d, e, f }, N (g) = {c}; b) N (A) = {b, d, e, f }, N (B) =
{b, d, e, f, g}; c) deg − (b) = 1, deg − (c) = 2, deg − (d) = 4 e deg − (e) = 1; d) deg + (a) = 1, deg + (b) = 2, deg + (d) = 1,
deg + (e) = 2 e deg + (g) = 1.

Resposta do Exercı́cio 8. .

Resposta do Exercı́cio 9. Cupim, Lagarto, Galinha e Onça a) deg − (Cupim) = 1, deg − (Lagarto) = 1, deg − (Galinha) =
5, deg − (Onça) = 2, deg + (Cupim) = 4, deg + (Lagarto) = 1, deg + (Galinha) = 1 e deg + (Onça) = 0
b) De modo geral, seres da base da cadeia alimentar possuem grau de entrada nulo e grau de saı́da positivo como é o
caso da madeira, isto é, apenas servem de alimento. Por outro lado, seres do topo da cadeia alimentar possuem grau
de saı́da nulo e grau de entrada positivo como é o caso da onça, isto é, apenas se alimentam. Outras análises podem
ser feitas.
c) O impacto a curto prazo seria um aumento de todos aqueles seres da cadeia que servem de alimento para a aranha
como é o caso da abelha e do cupim e uma diminuição daqueles seres que se alimentam da aranha que é o caso da
galinha, do sapo e do lagarto. Contudo, a longo prazo praticamente toda a cadeia será afetada tendo que adaptar-se
procurando substitutivos ou tendo superpopulações ou decaimento na população de alguns participantes da cadeia.

22
2.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 2. Links das Vı́deo Aulas Referentes ao Capı́tulo 2


Adjacência e Vizinhança em Grafos Não Orientados
Grau de Um Vértice em Um Grafo Não Orientado - Parte 1
Grau de Um Vértice em Um Grafo Não Orientado - Parte 2
Adjacência e Graus de Um Vértice em Um Grafo Orientado
Relação Entre o Grau de Entrada e o Grau de Saı́da em Um Grafo Orientado

23
Plano de Aula
Aula 3
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Grafos Especiais e Grafos Construı́dos a Partir de Outros Grafos.
Duração: 100 min
Objetivos:
- Apresentar alguns dos principais grafos necessários ao estudo da disciplina;
- Definir grafo bipartido;
- Apresentar o teorema das duas cores como ferramenta de se determinar se um grafo dado é bipartido ou não;
- Apresentar os conceitos de subgrafos e união de grafos.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

24
Capı́tulo 3

Grafos Especiais e Grafos Construı́dos a


Partir de Outros Grafos

3.1 Grafos Usuais


A seguir apresentaremos alguns grafos bastante recorrentes na teoria. Saber o nome e as caracterı́sticas destes
será muito importante na compreensão de alguns exemplos e situações futuras.

Exemplo 17. Um grafo de n vértices e dito completo, denotado por Kn , é um grafo simples que contém exatamente
uma aresta entre cada par de vértices distintos. Os grafos Kn , para n = 1, 2, 3, 4, 5, são exibidos na Figura 3.1. Um
grafo simples para o qual há pelo menos um par de vértices distintos não conexos por uma borda é chamado de
incompleto.

Figura 3.1: Grafos Kn para 1 ≤ n ≤ 5.

Exemplo 18. Um ciclo Cn , n ≥ 3, consiste de n vértices v1 , v2 , · · · , vn e arestas {v1 , v2 }, {v2 , v3 }, · · · , {vn−1 , vn }


e {vn , v1 }. Os ciclos C3 , C4 e C5 são exibidos na Figura 3.2.

Figura 3.2: Ciclos C3 , C4 e C5 .

25
Exemplo 19. Obtemos uma roda (wheel) Wn quando adicionamos um vértice adicional a um ciclo Cn , para n ≥ 3,
de tal modo que este novo vértice se conecte a cada um dos n vértices em Cn , por novas arestas. As rodas W3 , W4 e
W5 são exibidos na Figura 3.3.

Figura 3.3: Rodas W3 , W4 e W5 .

3.2 Grafo Bipartido

Definição 8. Um grafo simples G é chamado bipartido se seu conjunto de vértices V puder ser particionado em
dois conjuntos disjuntos V1 e V2 de tal forma que cada aresta do grafo conecta um vértice em V1 e um vértice em
V2 (portanto nenhuma aresta em G conecte dois vértices em V1 ou dois vértices em V2 ). Quando essa condição é
verificada, par (V1 , V2 ) é dito ser uma bipartição do conjunto de vértices V de G.

Exemplo 20. Note que C6 é bipartido conforme mostrado na Figura 3.4. De fato, seus vértices podem ser parti-
cionados em dois conjuntos V1 = {v1 , v3 , v5 } e V2 = {v2 , v4 , v6 } e toda aresta de C6 conecta um vértice de V1 a um
vértice de V2 .

Figura 3.4: Bipartição de C6

Palavra do Mestre 2. Observe, no Exemplo 20 que podemos remodelar um grafo de modo a obtermos o mesmo
grafo. Contudo essa remodelagem não pode alterar as relações existentes entre os vértices e as arestas presentes.
Após tratarmos da ideia de isomorfismo, mais à frente, ficaremos mais à vontade com tal transformação.

Exemplo 21. K3 não é bipartido. Para verificar isso note que se não dividirmos o conjuntos dos vértices de K3 em
dois conjuntos disjuntos, um destes conjuntos conterá dois vértices. Se não conseguiu ver que K3 não é bipartido,
aguarde que logo mais vai ficar moleza!

26
Exemplo 22. Os grafos mostrados na Figura 3.5 são bipartidos?

Figura 3.5: Grafos não orientados G e H.

Solução: O grafo G é bipartido pois seus vértices são a união dos conjuntos disjuntos {a, b, d, e} e {c, f, g} em que
cada aresta conecta um vértice de um desses subconjuntos a um vértice do outro subconjunto. Por outro lado, H não
é bipartido pois o conjunto dos seus vértices não pode ser particionado em dois subconjuntos disjuntos de modo que
arestas conectem um vértice de um desses subconjuntos a um vértice do outro. Sempre as arestas conectam vértices
do mesmo conjunto. Um motivo simples está nas relações entre os vértices b, c e g. Note que todos tem conexões entre
si de modo que é impossı́vel colocá-los em apenas duas partições distintas conforme exige a definição 8.

Teorema 4. Um grafo simples é bipartido se, e somente se, é possı́vel pintar cada um de seus vértices com apenas
duas cores de modo que dois vértices adjacente não sejam pintados da mesma cor.

Demonstração. Primeiros, suponha que G = (V, E) é um grafo bipartido simples. Então V = V1 ∪ V2 , em que V1 e V2
são disjuntos e todo aresta em E conecta um vértice de V1 a um vértice de V2 . Se pintarmos de uma cor cada vértice
em V1 uma segunda cor cada vértice em V2 , então nunca dois vértices adjacentes serão pintados com a mesma cor.
Agora suponha que é possivel pintar com duas cores todos os vértices de modo que nunca dois vértices adjacentes
sejam pintados com a mesma cor. Seja V1 o conjunto dos vértices pintados com uma das cores e V2 o conjunto dos
vértices pintados com a outra cor. Então V1 e V2 são disjuntos e V = V1 ∪ V2 . Além disso, toda aresta conecta
um vértice em V1 a um vértice em V2 pois nenhum par de vertices adjacentes são ambos vizinhos de V1 ou de V2 .
Consequentemente G é bipartido.

Exemplo 23. Use o Teorema 4 para mostrar que o grafo G do Exemplo 22 é bipartido e o grafo H não.
Solução: Comecemos analisando o grafo G. Consideremos as cores verde e vermelha para pintar cada vértice em G.
Assim, toda aresta de G deve conectar um vértice verde a um vértice vermelho. Sem perdas de generalidade, pintando
a de vermelho. Então, nós devemos pintar de azul c e f de verde. Para evitarmos ter uma aresta em G com dois
pontos finais verdes, nós devemos pintar de vermelho todos os vértices adjacentes a qualquer dos vértices c e f . Assim,
devemos pintar de vermelho os vértices d e e. Por fim, pintamos o vértice b com a cor vermelha e o vértice g com a
cor verde. Logo, o Teorema 4 assegura que G é bipartido. Acompanhe a coloração na Figura 3.6.
Agora, analisemos o grafo H. Tomando, novamente as cores verde e vermelho. Comecemos, sem perdas de generalidade
pintando a com a cor vermelha. A escolha inicial induz a escolha da cor verde para pintarmos o vértice b. Contudo,
esta segunda escolha nos induz à escolha da cor vermelha para pintar os vértices c e g o que não é permitido. Logo, o
grafo não é bipartido. Acompanhe a coloração na Figura 3.6.

27
Figura 3.6: Grafos não orientados G e H com coloração destacada.

Palavra do Mestre 3. Observe, no Exemplo 23, que a coloração do grafo poderia ser feita a partir de qualquer
vértice. Além disso o Teorema 4 pode ser usado tanto para mostrar que um grafo é bipartido como para mostrar
que não. Consegue ver isto?

Exemplo 24. Um grafo bipartido completo Km,n é um grafo em que seus vértices são particionados em dois sub-
conjuntos de m e n vértices, respectivamente, com uma aresta entre dois vértices se, e somente se, um vértice está no
primeiro subconjunto e um outro vértice no segundo subconjunto. Alguns grafos bipartidos completos são mostrados
na Figura 3.7.

Figura 3.7: Grafos biparidos completos K2,3 , K3,3 e K2,4 .

O Programa 2, em linguagem Python 3, verifica se um grafo é bipartido ou não.

3.3 Grafos a Partir de Outros Grafos


Agora veremos algumas definições que nos permitirão criar novos grafos a partir de grafos existentes em uma
dada situação. Tais definições serão bastante exploradas em capı́tulos futuros.

Definição 9. Um subgrafo de um grafo G = (V, E) é um grafo H = (W, F ), onde W ⊆ V e F ⊆ E.. Um subgrafo H


de G é um subgrafo próprio de G se H 6= G.

Em termos mais simples, um grafo H é subgrafo de um grafo G quando o primeiro pode ser obtido a partir de G
pela remoção de vértices e/ou arestas. Obviamente G é um subgrafo de G. Notou a semelhança com a Teoria dos
Conjuntos?

28
Exemplo 25. Determine qual(is) dos grafos H, F e J são subgrafos do grafo G, todos presentes na Figura 3.8:

Figura 3.8: Grafos Simples.

Solução: Note que o grafo H é subgrafo do grafo G uma vez que pode ser obtido removendo-se as arestas af e bd do
grafo G (remoção de arestas é válida); O grafo F também é um subgrafo do grafo G uma vez que pode ser obtido
removendo-se o vértice f do grafo G (remoção de vértices é válida); O grafo J não é um subgrafo do grafo G pois a
aresta ab presente em J não faz parte do grafo G (“acréscimo”de arestas ou vértices não são válidos).

Definição 10. A união de dois grafos simples G1 = (V1 , E1 ) e G2 = (V2 , E2 ) é o grafo simples com o conjunto de
vetores V1 ∪ V2 e o conjunto de arestas E1 ∪ E2 . A união de G1 e G2 é denotada por G1 ∪ G2 .

Exemplo 26. Exiba a união dos grafos G1 e G2 mostrados na Figura 3.9.

Figura 3.9: Grafos simples G1 e G2 .

Solução: O conjunto de vértices da união G1 ∪ G2 é a união dos dois conjuntos de vértices, a saber, {a, b, c, d, e, f }. O
conjunto de arestas da união é a união dos dois conjuntos de arestas. A união é exibida na Figura 3.10.

29
Figura 3.10: União dos grafos G1 e G2 .

3.4 Exercı́cios
Exercı́cio 10. Determine o número de vértices e o número de arestas que os grafos a seguir possuem:
a) C10 b) W8 c) K9 d) K9,12

Exercı́cio 11. Determine quais dos grafos a seguir (Figura 3.10) são bipartidos:

Exercı́cio 12. Sob quais condições um grafo do tipo ciclo Cn é bipartido?

Exercı́cio 13. Considere a a deifinição a seguir: Um grafo simples é dito regular se todo vértice deste grafo tiver o
mesmo grau. Para quais valores de n os grafos a seguir são regulares?
a) Kn b) Cn c) Wn

3.5 Respostas dos Exercı́cios


Resposta do Exercı́cio 10. a) 10 vértices e 10 arestas, b) 9 vértices e 16 arestas, c) 9 vértices e 36 arestas, d) 21
vértices e 108 arestas.

Resposta do Exercı́cio 11. G1 e G3 são bipartidos e G2 e G4 não.

Resposta do Exercı́cio 12. n deve ser par.

Resposta do Exercı́cio 13. a) n ≥ 1, b) n ≥ 3, c) n = 3

30
3.6 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 3. Links das Vı́deo Aulas Referentes ao Capı́tulo 3


Grafos Usuais
Grafo Bipartido
Exemplo Sobre Grafo Bipartido
Teorema das Duas Cores (Grafo Bipartido)
Subgrafo
União de Grafos

31
Plano de Aula
Aula 4
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Representação de Grafos.
Duração: 100 min
Objetivos:
- Apresentar a representação de um grafo por meio de listas de adjacência;
- Apresentar representações matriciais de um grafo.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

32
Capı́tulo 4

Representação de Grafos

Apresentaremos neste capı́tulo algumas formas de se representar um grafo. Tais formas serão muito úteis à medida
que caminhamos na teoria. Representar um grafo de uma forma não necessariamente geométrica nos possibilitará usar
não só ferramentas matemáticas como também computacionais. A máquina “entende” mais facilmente uma matriz
(usada em algumas representações) que um desenho! Além disso, algumas formas de se representar um grafo nos
permitirão observar em quais casos temos dois grafos aparentemente diferentes, mas que representam um mesmo
grafo, o chamado isomorfismo de grafos.

4.1 Representação Por Lista de Adjacências


A primeira forma de se representar grafos que apresentaremos são as chamadas listas de adjacências. Tais listas
especificam quais vértices são adjacentes a cada vértice de um grafo simples não orientado. Para o caso de um grafo
orientado especificaremos os vértices finais e iniciais.

Exemplo 27. Construa uma lista de adjacência para representar o grafo da Figura 4.1.

Figura 4.1: Grafo Simples

Solução: A tabela 27 apresenta a lista de adjacência referente ao grafo da Figura 4.1.

V ertice V ertices Adjacentes


a b, d
b a, c
c b, d, e
d a, c, e
e c, d

Tabela 27: Lista de Adjacência de um Grafo Simples.

33
Exemplo 28. Represente o grafo orientado mostrado na Figura 4.2 listando todos os vértices que são o terminal
vértices de arestas começando em cada vértice do grafo.

Figura 4.2: Grafo Orientado.

Solução: A tabela 28 apresenta a lista de adjacência referente ao grafo da Figura 4.2.

V ertice Inicial V ertices F inais


a b, c, e
b −
c a, d
d e
e e

Tabela 28: Lista de Adjacência de um Grafo Orientado.

O Programa 3, em linguagem Python 3, exibe a lista de adjacências associada a um grafo.

4.2 Representação Matricial


A utilização de matrizes é um dos pontapés iniciais para a utilização da programação computacional. Algumas
rotinas computacionais podem ser implementadas usando tal representação de um grafo.

4.2.1 Matrizes de Adjacência


Suponha que G = (V, E) seja um grafo simples onde |V | = n. Suponha que os vértices de G são listados
arbitrariamente como v1 , v2 , · · · , vn . A matriz de adjacência A (ou AG) de G, com respeito para esta listagem dos
vértices, é a matriz n × n zero − um com 1 como sua (i, j) − esima entrada quando vi e vj são adjacentes e 0 como
sua entrada (i, j)-ésima entrada quando não são adjacentes. Em outras palavras, se matriz de adjacência é A = [aij ],
então

 1 se vij é uma aresta de G
. aij =
 0 do contrário

34
Exemplo 29. Use uma matriz de adjacência para representar o grafo mostrado na Figura 4.3.

Figura 4.3: Grafo Simples.

Solução: Temos a seguinte matriz de adjacência referente ao grafo apresentado na Figura 4.3:
 
0 1 0 0 1 1
 
 1 0 0 1 1 0 
 
 
 0 0 0 1 1 0 
 
 0 1 1 0 1 1 
 
 
 1 1 1 1 0 0 
 
1 0 0 1 0 0

A utilização de matrizes de adjacência comporta grafos contendo múltiplas arestas. Neste caso, repassa-se o valor
1 para a quantidade de arestas entre os vértices em questão. Grafos com loops também são comportados utilizando-se
1 na posição aii para cada laço existente em um dado vértice.

Exemplo 30. Use uma matriz de adjacência para representar o grafo mostrado na Figura 4.4.

Figura 4.4: Pseudografo.

Solução: Temos a seguinte matriz de adjacência referente ao grafo apresentado na Figura 4.4:
 
0 0 1 2 1
 
 0 1 0 0 1 
 
 
 1 0 0 0 0 
 
 
 2 0 0 0 2 
 
1 1 0 2 0

35
4.2.2 Matrizes de Incidência
Uma outra maneira comum de representar um grafo é usando as chamadas matrizes de incidência. Seja G = (V, E)
um grafo não orientado. Suponha que v1 , v2 , · · · , vn são os vértices e e1 , e2 , · · · , em sejam as arestas de G. Então a
matriz de incidência com respeito à ordenação de V e E é a matriz n × m M = [mij ], em que

 1 quando aresta e incide sobre v
j i
aij =
 0 do contrário

Exemplo 31. Exiba a matriz de incidência do grafo mostrado na Figura 4.5.

Figura 4.5: Grafo Simples.

Solução: Temos a seguinte matriz de incidência referente ao grafo apresentado na Figura 4.5:

e1 e2 e3 e4 e5
 
a 1 1 1 0 0
 
b 
 0 0 0 1 0 

 
c 
 1 0 0 0 0 

 
 0
d  0 0 1 1 

e 0 0 1 1 1

Palavra do Mestre 4. Observe, no Exemplo 31, que a enumaração das arestas foi feita usando-se a ordem
lexicográfica, isto é, as arestas e1 , e2 , e3 , e4 e e5 estão ligadas à seguinte ordem ac, ad, ae, be e de respectivamente.
Fazendo desta forma ficará mais fácil entender como o computador processará cada dado de forma “organizada”.
Ao fazermos manualmente, a escolha, pode ser arbitrária (você escolhe como quiser), contudo, isso poderá
dificultar na hora da programação. Para o caso de múltiplas arestas xy fazemos assim xy1 = ei , xy2 = ei+1 e
assim sucessivamente até acabar todas as múltiplas aretas xy. Confira no Exemplo 32.

Matrizes de incidência também podem ser usadas para representar grafos contendo múltiplas arestas ou loops.

36
Exemplo 32. Exiba a matriz de incidência do grafo mostrado na Figura 4.6.

Figura 4.6: Pseudografo.

Solução: Temos a seguinte matriz de incidência referente ao grafo apresentado na Figura 4.6:

e1 e2 e3 e4 e5 e6 e7
 
a 1 1 1 1 0 0 0
 
 0
b  0 0 0 1 0 0 

 
 1
c  0 0 0 0 0 0 

 
 0
d  1 1 0 0 1 0 

e 0 0 0 1 1 1 1

Conseguiu enxergar a ordem de escolha das arestas?

4.3 Exercı́cios
Exercı́cio 14. Apresente listas de adjacências para representar os grafos dados:

Exercı́cio 15. Apresente matrizes de adjacências para representar os grafos dados:

37
Exercı́cio 16. Construa grafos cujas matrizes de adjacência são dadas a seguir:

 
0 1 0 0 0 1
   

 1 0 1 0 1 0 
 0 1 0 2
   
 0 1 0 1 0 0   1 1 2 0 
a)  b) 
  

0 0 1 0 1 0   0 2 0 1 
 
  
 

 0 1 0 1 0 1 
 2 0 1 0
1 0 0 0 1 0

Exercı́cio 17. Apresenta a matriz de incidência de cada um dos grafos a seguir (Siga a ordem lexicográfica para a
enumeração das arestas, isto é, ab = e1 , ac = e2 etc):

4.4 Respostas dos Exercı́cios


Resposta do Exercı́cio 14. Para o grafo F , temos a seguinte lista de adjacência:

Vértice Vértices Adjacentes


a b, d, e
b a, c
c b, e
d a, e
e a, c, d

Para o grafo G, temos a seguinte lista de adjacência:

Vértice Vértices Adjacentes


a b, d
b a, b, c
c b, d
d a, d, c

Para o grafo H temos a seguinte lista de adjacência:

Vértice Inicial Vértices Finais


a b, d, e
b b
c -
d a, c
d d

Resposta do Exercı́cio 15. Para o grafo G temos a seguinte matriz de adjacência:

38
 
1 1 0 1 1
 
 1 0 1 0 0 
 
 
 0 1 0 0 1 
 
 
 1 0 0 0 1 
 
1 0 1 1 0

Para o grafo H temos a seguinte matriz de adjacência:


 
0 1 1 1
 
 1 1 1 0 
 
 
 1 1 0 2 
 
1 0 2 0

Resposta do Exercı́cio 16. .

Resposta do Exercı́cio 17. a) Considerando a escolha das arestas em ordem lexicográfica, temos: ab = e1 , ad = e2 ,
bc = e3 , cd = e4 , ce = e5 e de = e6 , donde segue:
 
1 1 0 0 0 0
 
 1 0 1 0 0 0 
 
 
 0 0 1 1 1 0 
 
 
 0 1 0 1 0 1 
 
0 0 0 0 1 1

b) Considerando a escolha das arestas em ordem lexicográfica, temos: ab = e1 , ad1 = e2 , ad2 = e3 , bb = e4 , bc1 = e5 ,
bc2 = e6 , cd = e7 , donde segue:
 
1 1 1 0 0 0 0
 
 1 0 0 1 1 1 0 
 
 
 0 0 0 0 1 1 1 
 
0 1 1 0 0 0 1

39
4.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 4. Links das Vı́deo Aulas Referentes ao Capı́tulo 4


Representação de Um Grafo Por Lista de Adjacências
Matrizes de Adjacência
Matrizes de Incidência

40
Plano de Aula
Aula 5
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Isomorfismo de grafos.
Duração: 100 min
Objetivos:
- Apresentar o conceito de isomorfismo;
- Apresentar exemplos envolvendo grafos isomorfos e não isomorfos;
- Entender as dificuldades computacionais relacionadas ao isomorfismo.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

41
Capı́tulo 5

Isomorfismo de Grafos

Em muitas situações precisamos saber se dois grafos têm a mesma estrutura quando ignoramos as identidades de
seus vértices? Por exemplo, em quı́mica, os grafos são usados para modelar compostos quı́micos. Compostos diferentes
podem ter a mesma fórmula molecular, mas diferem na estrutura. Tais composto pode ser representado por grafos
que não podem ser desenhados da mesma maneira.

5.1 Condições Para a Existência do Isomorfismo


Definição 11. Os grafos simples G1 = (V1 , E1 ) e G2 = (V2 , E2 ) são isomorfos se existe uma função um-a-um f de
V1 a V2 com a propriedade que a e b são adjacentes em G1 se, e somente se, f (a) e f (b) são adjacentes em G2 , para
todos a e b em V1 . Tal função f é chamada um isomorfismo. Dois grafos simples que não são isomorfos são chamados
não-isomorfos.

Exemplo 33. Mostre que os grafos G = (V, E) e H = (W, F ) mostrados na Figura 15 são isomorfos.

Figura 5.1: Grafos G e H.

Solução: A função f com f (a) = s, f (b) = v, f (c) = u e f (d) = t é uma correspondência um-a-um entre V e W . Para
ver que essa correspondência preserva a adjacência, observe que os vértices adjacentes em G são a e b, a e c, b e d, e c
e d, e cada um dos pares f (a) = s e f (b) = v, f (a) = s e f (c) = u, f (b) = v e f (d) = t, e f (c) = u e f (d) = t consiste
em dois vértices adjacentes em H.

Muitas vezes é difı́cil determinar se dois grafos simples são isomorfos. Existem n! possibilidades de correspondências
um-a-um entre os conjuntos de vértices de dois grafos simples com n vértices. Testar cada correspondência para se
verificar se preserva a adjacência é impraticável se n for grande demais, até mesmo para o computador. Contudo, em
grande parte das situações, não é difı́cil mostrar que dois grafos não são isomorfos quando assim acontecer. Podemos
mostrar que dois grafos não são isomorfos se pudermos encontrar uma propriedade que apenas um dos grafos tenha e
o outro não. Uma propriedade preservada pelo isomorfismo de grafos é chamado invariante grafo. Por exemplo, grafos

42
simples isomorfos devem ter o mesmo número de vértices, pois há uma correspondência um-a-um entre os conjuntos de
vértices dos grafos. Grafos simples isomorfos também devem ter o mesmo número de arestas, pois a correspondência
um-a-um entre os vértices estabelece uma correspondência um-a-um entre arestas. Além disso, os graus dos vértices
em grafos simples isomorfos devem ser os mesmos. Isto é, um vértice v de grau α em G deve corresponder a um vértice
f (v) de grau α em H, pois um vértice w em G é adjacente a v se, e somente se, f (v) e f (w) são adjacentes em H.

Exemplo 34. Mostre que os grafos G e H mostrados na Figura 5.2 não são isomorfos.

Figura 5.2: Grafos G e H.

Solução: Ambos G e H têm cinco vértices e seis arestas cada um. No entanto, H tem um vértice de grau um, w,
enquanto G não nenhum. Segue-se que G e H não são isomorfos. Consegui ver outras três formas de mostrar que G
e H não são isomorfos! Consegue ver algum outro argumento que não o usado acima?

Exemplo 35. Determine se os grafos G e H mostrados na Figura 5.3 são isomorfos.

Figura 5.3: Grafos G e H.

Solução: Os grafos G e H têm oito vértices e dez arestas cada um. Eles também têm dois vértices de grau dois e quatro
vértices de grau três. Como todos esses invariantes concordam, ainda é concebı́vel que esses grafos sejam isomorfos.
No entanto, G e H não são isomorfos. Para ver isto, note que deg(a) = 2 em G, a deve corresponder tanto a t, u, x,
ou y em H, uma vez que estes são os vértices de grau dois em H. No entanto, cada um desses quatro vértices em H
é adjacente a outro vértice de grau dois em H, o que não é verdade para a em G.

43
Exemplo 36. Determine se os grafos G e H mostrados na Figura 5.4 são isomorfos.

Figura 5.4: Grafos G e H.

Solução: Ambos G e H têm seis vértices e sete arestas. Ambos tâm quatro vértices de grau dois e dois vértices de
grau três. Também é fácil ver que os subgrafos de G e H consistem de todos os vértices de grau dois e as arestas que
os conectam são isomórficas (como o leitor deve verificar). Como G e H concordam com relação a esses invariantes, é
razoável tentar encontrar um isomorfismo f . Pois bem, vejamos se há um isomorfismo entre G e H.
Vamos agora definir uma função f e depois determinar se é um isomorfismo. Como deg(a) = 2 e a não é adjacente a
nenhum outro vértice de grau dois, a imagem de a deve ser v ou x, os únicos vértices de grau dois em H. Além disso
v e x são adjacentes a vértices de grau 3 em H. Nós arbitrariamente definimos f (a) = x. [Se descobrimos que essa
escolha não levou ao isomorfismo, então tentarı́amos f (a) = v.] Como b é adjacente a a, as imagens possı́veis de b são
u e w. Nós arbitrariamente definimos f (b) = u. Continuando desta maneira, usando adjacência de vértices e graus
como um guia, definimos f (c) = v, f (d) = w, f (e) = s e f (f ) = t. Temos portanto uma correspondência um-a-um
entre o conjunto de vértices de G e o conjunto de vértices de H, ou seja, f (a) = x, f (b) = u, f (c) = v, f (d) = w,
f (e) = s, f (f ) = t. Para ver se f preserva bordas, examinamos a matriz de adjacência de G:
 
0 1 0 1 0 0
 
 1 0 1 0 0 1 
 
 
 0 1 0 1 0 0 
Ag =  
 1 0 1 0 1 0 
 
 
 0 0 0 1 0 1 
 
0 1 0 0 1 0

(Linhas e colunas na ordem a, b, c, d, e e f . )


A matriz de adjacência de H com as linhas e colunas rotuladas pelas imagens dos vértices correspondentes em G:
 
0 1 0 1 0 0
 
 1 0 1 0 0 1 
 
 
 0 1 0 1 0 0 
AH =  
 1 0 1 0 1 0 
 
 
 0 0 0 1 0 1 
 
0 1 0 0 1 0

(Linhas e colunas na ordem x, u, v, w, s e t. )


Como AG e AH , segue-se que f preserva arestas. Nós concluı́mos que f é um isomorfismo, então G e H são isomorfos.

44
5.2 Exercı́cios
Exercı́cio 18. Verifique se cada par de grafos é um isomorfismo. Em caso afirmativo exiba o isomorfismo.

Exercı́cio 19. Encontre todas as correspondências um-a-um entre os conjuntos A = {a, b, c} e B = {s, t, u}. Acres-
cente mais um elemento a cada conjunto e repita o que foi pedido anteriormente. Consegue explicar o motivo de um
computador demorar quando se busca um possı́vel isomorfismo?

5.3 Respostas dos Exercı́cios


Resposta do Exercı́cio 18. 1. São isomorfos com isomorfismo f (a) = s, f (b) = u, f (c) = w, f (d) = t e f (e) = v.
2. São isomorfos com f (a) = x, f (b) = t, f (c) = u, f (d) = w, f (e) = v e f (f ) = s.
3. Não são isomorfos. Procure um motivo!
4. São isomorfos com f (a) = s, f (b) = v, f (c) = x, f (d) = y, f (e) = t, f (f ) = u e f (g) = w.

Resposta do Exercı́cio 19. Para os conjuntos A = {a, b, c} e B = {s, t, u} temos: 1. f (a) = s, f (b) = t e f (c) = u;
2. f (a) = s, f (b) = u e f (c) = t; 3. f (a) = t, f (b) = s e f (c) = u; 4. f (a) = t, f (b) = u e f (c) = s; 5. f (a) = u,
f (b) = s e f (c) = t; 6. f (a) = u, f (b) = t e f (c) = s; Deixamos o restante a cargo do leitor. Em caso de dúvida,
procure o professor.

45
5.4 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 5. Links das Vı́deo Aulas Referentes ao Capı́tulo 5


Isomorfismo de Grafos
Invariantes Isomórficos e o Não-Isomorfismo
Exemplo Sobre Isomorfismo

46
Plano de Aula
Aula 6
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Caminhos e Aplicações.
Duração: 100 min
Objetivos:
- Apresentar o conceito de caminho em um grafo;
- Relacionar os conceitos de caminho e isomorfismo;
- Utilizar matrizes na contagem de caminhos entre vértices.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

47
Capı́tulo 6

Caminhos e Aplicações

Neste capı́tulo apresentaremos o conceito de conectividade bem como algumas aplicações voltadas ao isomorfismo
e também a um problema de contagem bem interessante.

6.1 Caminhos
Informalmente, um caminho é uma sequência de arestas que começa em um vértice de um grafo e viaja de vértice
para vértice ao longo das arestas do grafo. À medida que o caminho percorre suas bordas, ele visita os vértices ao
longo desse caminho, isto é, os pontos finais dessas arestas.

Definição 12. Seja n um inteiro não negativo e G um grafo não orientado. Um caminho de comprimento n de u para
v em G é uma sequência de n arestas e1 , . . . , en de G para o qual existe uma sequência x0 = u, x1 , . . . , xn−1 , xn = v
de vértices tais que ei tem, para i = 1, . . . , n, os pontos finais xi−1 e xi . Quando o grafo é simples, denotamos este
caminho pela sua sequência de vértices x0 , x1 , ..., xn . O caminho é um circuito se começa e termina no mesmo vértice,
isto é, se u = v, e tem comprimento maior que zero. O caminho ou circuito é dito passar pelos vértices x1 , x2 , . . . , xn−1
ou atravessar as arestas e1 , e2 , . . . , en . Um caminho ou circuito é simples se não contiver a mesma borda mais de uma
vez.

Exemplo 37. No grafo simples mostrado na Figura 6.1, a, b, e, f, c é um caminho simples de comprimento 4, pois
{a, b}, {b, e}, {e, f } e {f, c} são todas as arestas. No entanto, a, b, f, e não é um caminho, pois {b, f } não é uma aresta.
Note que a, b, c, e, a é um circuito de comprimento 4 pois {a, b}, {b, c}, {c, e} e {e, a} são arestas, e esse caminho começa
e termina em a. O caminho a, b, c, b, e, f , que é de comprimento 5, não é simples pois contém a borda {b, c} duas vezes.

Figura 6.1: Grafo simples.

Evite usar a palavra caminho quando se referir a uma aresta, exceto nos casos em que se estiver de fato tratando
de um caminho de comprimento 1.

48
Definição 13. Seja n um inteiro não negativo e G um grafo orientado. Um caminho de comprimento n de u para v
em G é uma sequência de arestas e1 , e2 , . . . , en de G tal que e1 está associado a (x0 , x1 ), e2 está associado a (x1 , x2 ),
e assim por diante, com en associado a (xn−1 , xn ), onde x0 = u e xn = v. Quando não há múltiplas arestas no grafo
orientado, esse caminho é denotado por sua sequência de vértices x0 , x1 , x2 , . . . , xn . Um caminho de comprimento
maior que zero que começa e termina no mesmo vértice é chamado de circuito ou ciclo. Um caminho ou circuito é
chamado simples se não contiver a mesma borda mais de uma vez.

Exemplo 38. No grafo orientado simples mostrado na Figura 6.2, a, b, c, e é um caminho simples de comprimento 3,
pois (a, b), (b, c) e (c, e) são todas as arestas. No entanto, a, b, e, d não é um caminho, pois (b, f ) não é uma aresta.
Note que a, b, c, e, a é um circuito de comprimento 4 pois (a, b), (b, c), (c, e) e (e, a) são arestas, e esse caminho começa
e termina em a. O caminho a, b, c, e, c, que é de comprimento 4, não é simples pois contém a borda (e, c) duas vezes.

Figura 6.2: Grafo simples.

6.2 Caminhos e Isomorfismo


Existem várias maneiras pelas quais caminhos e circuitos podem ajudar a determinar se dois grafos são isomorfos
(ou não são isomorfos como é mais comum). Por exemplo, a existência de um circuito simples de um determinado
comprimento é um invariante útil que pode ser usada para mostrar que dois grafos não são isomorfos. Além disso,
caminhos podem ser usados para construir mapeamentos que facilite-nos encontrar um isomorfismo entre grafos quando
for o caso.

Exemplo 39. Determine se os grafos G e H mostrados na Figura 6.3 são isomorfos.

Figura 6.3: Grafos G e H.

Solução: Ambos G e H têm seis vértices e oito arestas. Cada um tem quatro vértices de grau três e dois vértices de
grau dois. Assim, os três invariantes - número de vértices, número de arestas e os graus dos vértices - concordam para
os dois grafos. Entretanto, H tem dois circuitos simples de comprimento três, t, u, v, t e s, w, x, s, enquanto G não

49
possui um circuito simples de comprimento três, como pode ser determinado por inspeção. Como a existência de um
circuito simples de comprimento três é um invariante isomorfo, G e H não são isomorfos.

Exemplo 40. Determine se os grafos G e H mostrados na Figura 6.4 são isomorfos.

Figura 6.4: Grafos G e H.

Solução: Tanto G como H têm cinco vértices e seis arestas, ambos têm dois vértices de grau três e três vértices de
grau dois, e ambos possuem um circuito simples de comprimento três, um circuito simples de comprimento quatro e
um circuito simples de comprimento cinco. Como todos esses invariantes isomorfos concordam, G e H ainda podem
ser isomorfos. Verifique!.

Palavra do Mestre 5. Podemos usar caminhos para encontrarmos um possı́vel isomorfismo mais rapidamente.
Para tanto, bastamos procurar caminhos (de preferência circuitos) envolvendo o máximo de vértices em cada um
dos grafo de modo que a sequência de graus se repita em ambos. Considerando o grafo G do Exemplo 40 temos
um circuito a, b, c, e, d, a cuja sequência de graus associada é dada, respectivamente, por 2, 3, 2, 3, 2, 2. Um bom
sinal da existência de um isomorfismo entre G e H é a existência de um circuito com mesma sequência de graus.
Por insperção temos a seguinte sequência t, u, v, w, s, t cuja sequência de graus é também 2, 3, 2, 3, 2, 2. Neste caso,
pode-se verificar que há um isomorfismo entre G e H dado por f (a) = t, f (b) = u, f (c) = v, f (d) = s, f (e) = w.
Pegou a manha? Daria para ensinar esta forma à máquina? A pergunta foi pra você, eu ensino só matemática!

6.3 Contando Caminhos Entre Vértices


O número de caminhos entre dois vértices em um grafo pode ser determinado usando sua matriz de adjacência.

Teorema 5. Seja G um grafo com matriz de adjacência A em relação à ordenação v1 , v2 , . . . , vn dos vértices do grafo
(com arestas direcionadas ou não direcionadas, com múltiplas arestas e loops). O número de caminhos diferentes de
comprimento r de vi para vj , onde r é um inteiro positivo, é igual à entrada (i, j) de Ar .

Demonstração. O teorema será provado usando indução matemática. Seja G um grafo com a matriz de adjacencia A
(assumindo uma ordenação v1 , v2 , . . . , vn dos vértices de G). O número de caminhos de vi para vj de comprimento 1
é a entrada (i, j) de A, pois esta entrada é o número de arestas de vi paravj . Suponha que a (i, j)-ésima entrada de Ar
é o número de caminhos diferentes de comprimento r de vi para vj . Esta é a hipótese indutiva. Como Ar+1 = Ar A,
a (i, j)-ésima entrada de Ar+1 é igual a

bi1 a1j + bi2 a2j + . . . + bin anj ,

50
em que bik é a (i, k)-ésima entrada de Ar . Pela hipótese indutiva, bik é o número de caminhos de comprimento r de vi
para vk . Um caminho de comprimento r + 1 de vi para vj é constituı́do por um caminho de comprimento r de vi para
algum vértice intermediário vk e uma borda de vk para vj . Pela regra do produto para contagem, o número desses
caminhos é o produto do número de caminhos de comprimento r de vi para vk , a saber, bik é o número de arestas de
vk para vj , akj . Quando esses produtos são adicionados para todos os possı́veis vértices intermediários vk , o resultado
desejado segue a regra de soma para contagem.

Exemplo 41. Quantos caminhos de comprimento 4 existem de a para d no grafo simples G na Figura 6.5?

Figura 6.5: Grafo G.

Solução: A matriz de adjacência de G (ordenando os vértices como a, b, c, d) é:


 
0 1 1 0
 
 1 0 0 1 
A=
 

 1 0 0 1 
 
0 1 1 0

Assim, o número de caminhos de comprimento quatro de a para d é (1, 4)-ésima entrada de A4 . É bom saber usar um
software para o cálculo matricial!
 
8 0 0 8
 
 0 8 8 0 
A4 = 
 

 0 8 8 0 
 
8 0 0 8

Portanto, temos 8 caminhos. A saber, os caminhos são: ababd, abacd abdbd, abdcd, acacd, acdac, acdbc e acdcd. É
melhor saber quantas agulhas há no palheiro antes de ir buscar! Neste existiam 8.

6.4 Exercı́cios
Exercı́cio 20. Com base no grafo G dado a seguir analise cada uma das afirmações classificando-as em verdadeiras
ou falsas.

a) A sequência a, e, c corresponde a um caminho de comprimento 2 no grafo G.

51
b) A sequência a, b, c, d corresponde a um caminho de comprimento 3 no grafo G.
c) A sequência a, b, d, e, a corresponde a um circuito simples de comprimento 4 no grafo G.
d) O grafo G não possui circuitos de comprimento igual a 3.

Exercı́cio 21. Use caminhos para mostrar que os pares de grafos não são isomorfos ou para ter uma ideia de um
possı́vel isomorfismo. Justifique.

Exercı́cio 22. Considerando o grafo G dado a seguir determine:

a) Quantos caminhos de comprimento 3 existem de a para d.


b) Quantos caminhos de comprimento 3 existem de d para e.
c) Quantos caminhos de comprimento 10 existem de c para f .
d) Determine todos os caminhos de comprimento 4 que existem de a para e.

6.5 Respostas dos Exercı́cios


Resposta do Exercı́cio 20. a) V , b) F , c) V , d) V

Resposta do Exercı́cio 21. a) não isomorfos, b) não isomorfos, c) isomorfos, d) não isomorfos

Resposta do Exercı́cio 22. a) 2, b) 5, c) 4813, d) Caminho 1: a, b, c, d, e; Caminho 2: a, f, c, d, e.

52
6.6 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 6. Links das Vı́deo Aulas Referentes ao Capı́tulo 6


Caminhos em Grafos
Exemplo Envolvendo Caminhos e Isomorfismo
Contando Caminhos Entre Vértices

53
Plano de Aula
Aula 7
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Conectividade.
Duração: 100 min
Objetivos:
- Apresentar o conceito de conectividade em grafos não orientados;
- Relacionar conectividade e segurança de uma rede;
- Apresentar o conceito de conectividade em grafos orientados.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

54
Capı́tulo 7

Conectividade

Muitos problemas podem ser modelados com caminhos formados ao percorrer as arestas dos grafos. Por exemplo, o
problema de determinar se uma mensagem pode ser enviada entre dois computadores usando links intermediários pode
ser estudada com um modelo grafo. Problemas de planejamento eficiente de rotas para entrega de correspondências,
coleta de lixo, diagnósticos em redes de computadores e assim por diante podem ser resolvidos usando modelos que
envolvam caminhos em grafos.

7.1 Conectividade em Grafos Não-Orientados


Definição 14. Um grafo não orientado é chamado conexo se houver um caminho entre cada par de vértices distintos
do grafo. Um grafo não orientado que não está conexo é chamado de desconexo. Dizemos que desconectamos um grafo
quando removemos vértices ou arestas, ou ambos, para produzir um subgrafo desconexo. (A remoção de um vértice
implica na remoção de todas as arestas incidentes nele.)

Exemplo 42. O grafo G na Figura 7.1 é conexo pois, para cada par de vértices distintos há um caminho entre eles
(Se não acredita, verifique. Não acredite em tudo que te dizem.). No entanto, o grafo H na Figura 7.1 não é conexo.
Por exemplo, não há caminho de H entre os vértices s e v.

Figura 7.1: Grafos G1 e G2 .

Teorema 6. Existe um caminho simples entre cada par de vértices distintos de um grafo não orientado conexo.

Demonstração. Seja u e v dois vértices distintos do grafo não orientado conexo G = (V, E). Como G está conexo,
existe pelo menos um caminho entre u e v. Deixe x0 , x1 , . . . , xn , em que x0 = u e xn = v, seja a sequência de vértices
de um caminho de menor comprimento. Esse caminho de menor comprimento é simples. Para ver isso, suponha

55
que não seja simples. Então xi = xj para alguns i e j com 0 ≤ i ≤ j. Isto significa que existe um caminho de u
para v de menor comprimento com a sequência de vértices x0 , x1 , . . . , xi−1 , xj , . . . , xn obtido pela exclusão das arestas
correspondentes à sequência de vértices xi , . . . , xj−1 .

Note que, no Exemplo 42, o grafo H possui dois subgrafos conexos, formados respectivamente pelos conjuntos de
vértices (e respectivas arestas) H1 = {s, t, x; st, sx} e H2 = {u, v, w; uv, uw, vw}.

Definição 15. Um componente conexo de um grafo G é um subgrafo conexo de G que não é um subgrafo próprio de
outro subgrafo conexo de G.

Decorre da Definição 15 temos que um componente conexo de um grafo G é um subgrafo conexo máximo de G.
Um grafo G não conexo possui dois ou mais componentes conexos que são separados e têm G como sua união.
Voltando ao subgrafo H do Exemplo 42 temos que os subgrafos H1 e H2 são componentes conexas de H. Por
outro lado, um subgrafo H3 formado apenas pelos vértices s e t e pela aresta {s, t} não é considerada uma componente
conexa, embora seja conexo. Isso decorre do fato de existir o subgrafo conexo H1 que o contém propriamente.

7.2 Quão conexo é um Grafo?


Suponha que um grafo represente uma rede de computadores. Supondo que este grafo seja conexo nos podemos
dizer que quaisquer dois computadores na rede podem se comunicar. No entanto, gostarı́amos também de entender o
quão confiável é essa rede. Por exemplo, ainda será possı́vel que todos os computadores se comuniquem depois que
um roteador ou um link de comunicação falhe? Para responder a esta e outras perguntas semelhantes apresentaremos
alguns novos conceitos.
Às vezes, a remoção de um vértice de um grafo e de todas as bordas incidentes neste produz um subgrafo com
mais componentes conexos que o original. Tais vértices são chamados de vértices de corte. Analogamente, uma aresta
cuja remoção produz um grafo com mais componentes conexos do que no grafo original é chamada de aresta de corte.
Observe que em um grafo representando uma rede de computadores, um vértice de corte e uma aresta de corte
representam um roteador e um link essenciais que não podem falhar para que todos os computadores possam se
comunicar.

Exemplo 43. Encontre os vértices de corte e as arestas de corte do grafo G mostrado na Figura 7.2. Em cada caso
exiba os subgrafos conexos resultantes de cada remoção.

Figura 7.2: Grafo Conexo.

Solução: Temos dois vértices de corte, b e d. O vértice b quando removido produz as componentes conexas G1 =
{a, c; ac} e G2 = {d, e, f ; de, df }; O vértice d quando removido produz as componentes conexas G3 = {a, b, c, e; ab, ac, bc, be}
e G4 = {f }. Temos apenas uma aresta de corte a aresta {f, d} cuja remoção produz as componentes conexas
G5 = {a, b, c, d, e; ab, ac, bc, bd, be, de} e G6 = {f }.

56
Nem todos os grafos possuem vértices de corte. Por exemplo, o grafo completo Kn , com n ≥ 3, não possui vértices
de corte. Quando você remove um vértice de Kn e todas as bordas incidentes a ele, o subgrafo resultante é o grafo
completo Kn−1 , um grafo conexo. Grafos conexos sem vértices de corte são chamados de grafos não separáveis e, além
disso são considerados mais conexos do que aqueles com um vértice de corte. Podemos estender essa noção definindo
uma medida mais precisa de conectividade de grafos baseada no número mı́nimo de vértices que podem ser removidos
para desconectar um grafo.
Um subconjunto V 0 do conjunto de vértices V de G = (V, E) é um corte de vértices, ou conjunto de separação, se
G − V 0 for desconexo. Definimos a conectividade de vértices de um grafo não completo G, denotado por κ(G), como
sendo o número mı́nimo de vértices em um corte de vértices.
Analogamente, podemos medir a conectividade de um grafo conexo G = (V, E) em termos do número mı́nimo
de arestas que devemos remover para desconectá-lo. Se um grafo tiver uma aresta de corte, precisaremos apenas
removê-la para desconectar G. Se G não tiver uma aresta de corte, procuramos o menor conjunto de arestas que
podem ser removidas para desconectá-lo. Um conjunto de arestas E é chamado de corte de arestas de G se o subgrafo
G − E 0 é desconexo. A conectividade de aresta de um grafo G, denotada por λ(G), é o número mı́nimo de arestas em
um corte de aresta de G. Isso define λ(G) para todos os grafos conexos com mais de um vértice pois sempre é possı́vel
desconectar tal grafo, removendo todas as arestas incidentes em um dos seus vértices. Note que λ(G) = 0 se G é não
conexo. Também especificamos que λ(G) = 0 se G é um grafo que consiste em um único vértice. Segue que se G é
um grafo com n vértices, então 0 ≤ λ(G) ≤ n − 1.

Exemplo 44. Encontre a conectividade de vértices e por arestas de cada um dos grafos na Figura 7.3.

Figura 7.3: Grafos conexos.

Solução: Ambos grafos da Figura 7.3 são conexos. Note que o vértice b de G é um vértice de corte donde segue
que κ(G) = 1 uma vez que removendo-se b produzimos subgrafos conexos G1 = {a, c; ac} e G2 = {d, e, f ; de, df, ef }.
Ainda considerando o grafo G, temos λ(G) = 2, pois removendo-se duas arestas, digamos {b, d} e {b, e} produzimos
dois subgrafos conexos G3 = {a, b, c; ab, ac, bc} e G4 = {d, e, f ; de, df, ef }; Considerando o grafo H, temos κ(H) = 2
pois, removendo-se os vértices b e f produzimos dois subgrafos conexos H1 = {a, e; ae} e H2 = {c, d, g, h; cd, cg, gh}.
Ainda considerando o grafo H, temos que λ(H) = 3 pois, precisamos remover ao menos três arestas para produzir
subgrafos desconexos. Em particular, se removermos as arestas {a, b}, {a, e} e {a, f } produziremos os subgrafos
conexos H3 = {a} e H4 = {b, c, d, e, f, g, h; be, bc, bd, bh, cd, cg, df, f e, f g, f h, gh}.

Quando G = (V, E) é um grafo conexo incompleto com pelo menos três vértices, o grau mı́nimo de um vértice de G
é um limite superior para κ(G) e λ(G). Ou seja, κ(G) ≤ minv∈V deg(v) e λ(G) ≤ minv∈V deg(v). Temos, a seguinte
inequação:
κ(G) ≤ λ(G) ≤ minv∈V deg(v).

57
7.3 Conectividade em Grafos Orientandos
Existem duas noções (Definição 16 e Definição 17) de conectividade em grafos orientados associadas as direções
de suas arestas.

Definição 16. Um grafo orientado é fortemente conexo se houver um caminho de a para b e de b para a sempre que
a e b forem vértices no grafo.

Definição 17. Um grafo orientado é fracamente conexo se houver um caminho entre cada dois vértices no grafo não
orientado associado.

Exemplo 45. Os grafos orientados G e H mostrados na Figura 7.4 estão fortemente conexos? Eles estão fracamente
conexos?

Figura 7.4: Grafos orientados G e H.

Solução: G é fortemente conexo pois existe um caminho entre quaisquer dois vértices neste grafo orientado (o leitor
deve verificar isso). Portanto, G também é fracamente conexo. O grafo H não é fortemente conexo. Não há caminho
orientado de s para t neste grafo. No entanto, H é fracamente conexo, pois existe um caminho entre quaisquer dois
vértices no grafo não orientado associado a H (o leitor deve verificar isso).

Os subgrafos de um grafo orientado G que estão fortemente conexos, mas não contidos em subgrafos maiores
fortemente conexos são chamados de componentes fortemente conexos ou componentes fortes de G. Note que se a e b
são dois vértices em um grafo direcionado, seus componentes fortes são os mesmos ou são disjuntos.

Exemplo 46. O grafo H na Figura 7.4 possui três componentes fortemente conexos, H1 consistindo no vértice s; H2
consistindo no vértice w; e o subgrafo H3 consistindo dos vértices t, u, e v e arestas (t, u), (u, v) e (v, t). Como dito
anteriormente, Hi ∩ Hj = ∅ sempre que i 6= j com i, j ∈ {1, 2, 3}.

O Programa 4, em linguagem Python 3, mostra se existe ou não um caminho entre dois vértices em um grafo
orientado.

58
7.4 Exercı́cios
Exercı́cio 23. Determine se cada um desses grafos está fortemente conexo e se não, se está fracamente conexo.

Exercı́cio 24. Encontre os componentes fortemente conexos dos grafos dados a seguir:

7.5 Respostas do Exercı́cios


Resposta do Exercı́cio 23. a) apenas fracamente conexo, b) apenas fracamente conexo, c) nem ao menos fracamente
conexo

Resposta do Exercı́cio 24. a) G1 = {a, f, b}, G2 = {c, e}, G3 = {d}, b) H1 = {m, n, o, p, q, t}, H2 = {s}, H3 = {r}

59
7.6 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 7. Links das Vı́deo Aulas Referentes ao Capı́tulo 7


Conectividade
Elementos de Corte em Um Grafo
Conectividade em Grafos Orientados

60
Plano de Aula
Aula 8
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Circuito e Caminho de Euler.
Duração: 100 min
Objetivos:
- Definir circuito e caminho de Euler;
- Apresentar resultados que ajudem na identificação de grafos contendo circuitos e caminhos de Euler;
- Apresentar um algoritmo na busca por um circuito de Euler;
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

61
Capı́tulo 8

Circuito e Caminho de Euler


Podemos percorrer as arestas de um grafo iniciando em um vértice e retornando a ele percorrendo todas as
arestas deste grafo exatamente uma vez? Ou ao menos percorrer todas as aresta do grafo uma única vez, mesmo que o
caminho não seja um circuito? Neste capı́tulo apresentaremos condições para a existência de tais circuitos e caminhos.

8.1 Circuito e Caminho de Euler


Retomemos um exemplo dado no inı́cio deste material. A cidade de Konigsberg, na Prússia (agora chamada de
Kaliningrado e parte da república russa), foi dividida em quatro seções pelos ramos do rio Pregel. Essas quatro seções
incluı́am as duas regiões nas margens do Pregel, na ilha de Kneiphof e na região entre os dois ramos do Pregel. No
século XVIII, sete pontes conectaram essas regiões. A Figura 8.1 mostra essas regiões e pontes.

Figura 8.1: Esboço das Sete Pontes de Konigsberg.

Surgia aı́ uma pergunta enigmática. Era possı́vel começar em algum lugar da cidade, atravessar todas as pontes
uma única vez e voltar ao ponto de partida?
No ano de 1736 o matemático suı́ço Leonhard Euler resolveu esse problema. Sua solução é considerada o primeiro
uso formal da teoria dos grafos. Euler estudou este problema usando o multigrafo obtido quando as quatro regiões são
representadas por vértices e as pontes por arestas. Este multigrafo é mostrado na Figura 8.2.

Figura 8.2: Modelo Multigrafo das Pontes de Konigsberg.

62
Definição 18. Um circuito de Euler em um grafo G é um circuito simples que contém todas as arestas de G. Um
caminho de Euler em G é um caminho simples que contém todas as arestas de G.

Exemplo 47. Quais dos grafos não orientados da Figura 8.3 possuem um circuito Euler? Daqueles que não têm,
quais têm um caminho de Euler?

Figura 8.3: Grafos Não Orientados F , G e H.

Solução: O grafo F possui um caminho de Euler e, b, a, d, c, f, e, d; O grafo G possui um circuito de Euler dado por
l, k, h, g, i, n, h, i, m, j, n, g, l; O grafo H não possui circuito ou caminho de Euler.

Exemplo 48. Quais dos grafos orientados da Figura 8.4 possuem um circuito Euler? Daqueles que não têm, quais
têm um caminho de Euler?

Figura 8.4: Grafos Orientados.

Solução: O grafo F apresenta um circuito de Euler a, b, e, f, c, d, a; O grafo G apresenta um caminho de Euler


m, g, h, j, k, i, l, m, i, l; O grafo H não possui circuito ou caminho de Euler.

Palavra do Mestre 6. Observe, no Exemplo 47, não parece ser tarefa muito fácil encontrar um circuito ou
caminho de Euler. Além disso, como procurar algo se nem se quer sabemos que existe. Isto não é matemática.
Em muitos casos a matemática se atém em mostrar a existência de certo objeto antes de procurá-lo. Imagine
procurar um circuito ou caminho de Euler em um grafo algumas dezenas de vértices sem ao menos saber se
tais objetos existem. Para a nossa felicidade temos teoremas que asseguram a existencia de tais objetos quando
atendidas algumas condições. Antes de procurar uma agulha no palheiro seria bom saber se há uma agulha no
palheiro!

63
Teorema 7. Um multigrafo conexo com pelo menos dois vértices tem um circuito de Euler se, e somente se, cada um
de seus vértices tiver um grau par.

Teorema 8. Um multigrafo conexo possui um caminho de Euler, mas não um circuito de Euler, se e somente se, tiver
exatamente dois vértices de grau ı́mpar.

Exemplo 49. Voltando ao Exemplo 47 temos que os graus de todos os vértices do grafo G tem grau par e portanto,
o Teorema 7 assegura existência de um circuito de Euler. Por outro lado, temos no grafo F exatamente dois vértices
de grau ı́mpar, d e e. Neste caso, o Teorema 8 assegura a existência de um caminho de Euler. Por fim, o grafo H não
atende aos requisitos de nenhum dos Teoremas 7 e 8 e portanto não pode comportar um circuito ou caminho de Euler.

O Programa 5 verifica se um grafo tem um circuito de Euler ou tem um caminho de Euler ou nenhum dos dois.

Teorema 9. Um multigrafo orientado sem vértices isolados tem um circuito de Euler se, e somente se, o grafo estiver
fracamente conexo e o grau de entrada e saı́da de cada vértice forem iguais.

Teorema 10. Um multigrafo orientado sem vértices isolados tem um caminho de Euler mas não um circuito de Euler
se, e somente se, o grafo estiver fracamente conexo e o grau de entrada e saı́da de cada vértice forem iguais para todos,
exceto dois vértices u e v, um que deg + (u) = deg − (u) + 1 e deg + (v) + 1 = deg − (v) (ou vice versa).

Exemplo 50. Voltando ao Exemplo 48 temos que todos os vértices do grafo F tem graus de entrada e saı́da iguais
a 1 e portanto o Teorema 9 assegura a existência de um circuito de Euler. Por outro lado, o grafo G é tal que
todos os seus vértices exceto dois, m e j são iguais a 1 sendo que os citados são tais que deg + (m) = deg − (m) + 1 e
deg + (j) + 1 = deg − (j) e portanto o Teorema 10 assegura a existência de um caminho de Euler. Por fim, o grafo H
não atende aos requisitos de nenhum dos Teoremas 9 e 10 e portanto não pode comportar um circuito ou caminho de
Euler.

Ao considerarmos um grafo estando certos da existência de um ciclo Euleriano podemos usar o algoritmo a seguir
para encontrá-lo.

Algoritmo 1. Construção de Ciclos Eulerianos


. procedure Euler(G: multigrafo conexo com todos os vértices de grau par)
. ciclo := um ciclo em G começando em um vértice escolhido arbitrariamente com arestas adicionadas sucessi-
vamente para formar um caminho que retorne a este vértice
. H := G com as arestas deste ciclo removidas
. while H tenha arestas
. begin
. subciclo := um ciclo em H que comece em um vértice de H que também seja uma extremidade de uma
aresta do ciclo
. H := H com as arestas do subciclo e todos os vértices isolados removidos
. ciclo := ciclo com subciclo inserido no vértice apropriado
. end {cliclo é um ciclo Euleriano}

64
Exemplo 51. Aplique o Algoritmo 1 ao grafo G do Exemplo 47.
Solução: Primeiro, formamos o ciclo g, n, j, m, i, h, g formamos o subgrafo H excluindo todas as arestas deste ciclo
e todos os vértices que se tornaram isolados quando essas arestas foram removidas. A seguir, formamos o ciclo
l, k, h, n, i, g, l. Acompanhe os passos na Figura 8.5:

Figura 8.5: Passos da obtenção do ciclo Euleriano.

Para finalizar devemos formar o ciclo Euleriano. Note que entre os ciclos a ao menos um vértice comum (por quê?).
Observe que o vértice g está em ambos e, sendo este o “começo”de um dos ciclos podemos usá-lo como ponto de
ligação entre os dois ciclos, isto é
l, k, h, n, i ↔ g, n, j, m, i, h, g ↔ l
(1) (2) (3)

o que resulta no seguinte ciclo Euleriano l, k, h, n, i, g, n, j, m, i, h, g, l.


(1) Parte “inicial”do segundo ciclo;
(2) Primeiro ciclo;
(3) Parte “final”do segundo ciclo.

O Programa 6, em linguagem Python 3, aplica o algoritmo de Fleury em um grafo. Caso o grafo não tenha um
circuito ou caminho de Euler o programa exibe um caminho ou circuito interno qualquer (O ideal é aplicar o
programa em um grafo contendo um caminho ou circuito de Euler.)

8.2 Exercı́cios
Exercı́cio 25. Para cada um dos grafos a seguir, primeiro determine a existência ou não de um circuito ou caminho
de Euler. Se existir um exiba-o. (Menino de 5a série vai logo cobrindo o desenho!)

Exercı́cio 26. Utilize o Algoritmo 2 para determinar ciclos Eulerianos dos grafos (Eulerianos) contidos no Exercı́cio
25.

65
8.3 Respostas dos Exercı́cios
Resposta do Exercı́cio 25. a) Existe um circuito de Euler a, b, c, d, e, f, g, a, c, e, a, b) Existe um caminho de Euler
i, j, k, h, i, m, h, l, j, m, l, i, k, c) Não existe circuito ou caminho de Euler, d) Não existe circuito ou caminho de Euler,
e) Existe um circuito de Euler g, h, i, k, j, g, i, l, m, g, f) Existe um caminho de Euler o, p, q, o, r.

Resposta do Exercı́cio 26. Grafo F : Ciclo 1: a, b, c, d, e, a, Ciclo 2: f, g, a, c, e, f , Ciclo Euleriano: f, g, /a, b, c, d, e, a, /c, e, f ;
Grafo J: Pode aplicar? Acreditamos que sim pois os graus de entrada e de saı́da são pares. Ciclo 1: m, g, h, i, l, m,
Ciclo 2: g, i, k, j, g, Ciclo Euleriano: m, /g, i, k, j, g, /h, i, l, m.

66
8.4 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 8. Links das Vı́deo Aulas Referentes ao Capı́tulo 8


Circuito e Caminho de Euler
Teoremas Sobre Caminhos e Circuitos de Euler em Grafos Não Orientados
Teoremas Sobre Caminhos e Circuitos de Euler em Grafos Orientados
Teoremas de Ciclos Eulerianos Usando o Algoritmo de Fleury

67
Plano de Aula
Aula 9
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Circuito e Caminho de Hamilton
Duração: 100 min
Objetivos:
- Definir circuito e caminho de Hamilton;
- Apresentar resultados que ajudem na identificação de grafos.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

68
Capı́tulo 9

Circuito e Caminho de Hamilton

9.1 Introdução
Apresentamos condições necessárias e suficientes para a existência de caminhos e circuitos que contêm cada borda
de um multigrafo exatamente uma vez. Podemos fazer o mesmo para caminhos e circuitos simples que contêm todos
os vértices do grafo exatamente uma vez? Infelizmente, não. A busca pela existência de circuitos desta natureza é
algo relativamente difı́cil quando comparada à procura por circuitos ou caminhos de Euler. Apresentaremos alguns
resultados a seguir que nos possibilitarão mostrar a existência de circuitos com tais caracterı́sticas.

9.2 Resultados Sobre a Existência de Circuitos de Hamilton


Definição 19. Um caminho simples em um grafo que passa em cada vértice exatamente uma vez é chamado de
caminho de Hamilton, e um circuito simples em um grafo G que passa por todos os vértices exatamente uma vez é
chamado de circuito de Hamilton. Ou seja, o caminho simples x0 , x1 , . . . , xn−1 , xn no grafo G = (V, E) é um caminho
de Hamilton se V = {x0 , x1 , . . . , xn−1 , xn } e xi 6= xj para 0 ≤ i < j ≤ n, e o circuito simples x0 , x1 , . . . , xn−1 , xn , x0
(com n > 0) é um circuito de Hamilton se x0 , x1 , . . . , xn−1 , xn é um caminho de Hamilton.

Exemplo 52. Quais dos grafos simples na Figura têm um circuito Hamilton ou, se não, um caminho Hamilton?

Figura 9.1: Quatro Grafos Simples.

Solução: O grafo F possui um circuito de Hamilton dado por a, b, c, d, e, a. O grafo G não possui circuito ou caminho
de Hamilton. O grafo H possui um circuito de Hamilton u, s, t, v, w, r, u. O grafo I possui um caminho de Hamilton
o, p, m, n, q.

69
Os dois teoremas a seguir nos ajudarão na tarefa de identificar grafos contendo circuitos de Hamilton (somente
circuitos!).

Teorema 11. Se G é um grafo simples com n vértices com n ≥ 3 tais que o grau de todos os vértices em G é pelo
n
menos 2, então G tem um circuito de Hamilton.

Teorema 12. Se G é um grafo simples com n vértices, n ≥ 3 tais que deg(u) + deg(v) ≥ n para cada par de vértices
não adjacentes u e v em G, então G tem um circuito de Hamilton.

Exemplo 53. Voltando ao Exemplo 52 temos que, o grafo F é tal que a soma dos graus de todos vértices não
adjacentes é maior ou igual a 5 (neste caso, somente igual). De fato, os únicos pares não adjacentes são o par a e c e
o par a e d donde temos deg(a) + deg(c) = deg(a) + deg(d) = 5. Portanto o Teorema 12 assegura a existência de um
circuito de Hamilton. Note que o Teorema 11 não pode ser aplicado pois, deg(a) = 2 < 25 ; O grafo H é tal que cada
6
vértice possui grau superior a 2 e portanto o Teorema 11 assegura a existência de um circuito de Hamilton, note que
o Teorema 12 também se aplica ao grafo H para mostrar a existência de um circuito de Hamilton pois, a soma de não
adjacentes é superior a 6 (verifique os pares, r e t, u e v e por fim u e w. Note que nenhum dos Teoremas 11 e 12 se
aplica aos grafos G e I.

O Programa 7, em linguagem Python 3, exibe, se existir, um circuito de Hamilton.

Palavra do Mestre 7. Há uma grande diferença entre a comprovação da existência de circuitos (ou caminhos)
de Euler e circuitos (ou caminhos) de Hamilton. No primeiro caso, temos teoremas do tipo “... se, e somente,...”e
no segundo caso, teoremas do tipo “Se...,então...”. Teoremas do tipo “...se e somente se...”são, em geral, muito
potentes quando comparados os “Se..., então...”. No caso da comprovação da existência de circuitos ou caminhos
de Euler acredito que não há qualquer dúvida até mesmo nos grafos mais complexos. Uma busca rápida identifica
a existência ou não de tais estruturas. Por outro lado, a comprovação da existência de um circuito de Hamilton
se mostrou mais aberta ao passo que nem todo grafo atende a pelo menos um dos dois teoremas dados. Além
disso é possı́vel que exista um circuito de Hamilton em um grafo mesmo que nenhum dos dois teoremas dados
tenha hipóteses satisfeitas. Para ver isto basta tomar, por exemplo, o ciclo C6 . Nele todos os vértices tem grau
6
2 que é menor que 2 (Teorema 11 não se aplica) e também, a soma de não adjacentes é igual 4 (Teorema 12 não
se aplica). Ao final do Exemplo 53 afirmamos que os Teoremas 11 e 12 não se aplicam aos grafos G e I. O que
isso significa? Na verdade as condições da hipótese (antes do “então”) não são verificadas e portanto somente
por inspeção ou usando outros resultados podemos ter certeza se existem ou não circuitos de Hamilton. Muito
cuidado com teoremas!

9.3 Exercı́cios
Exercı́cio 27. Para cada um dos grafos a seguir, se possı́vel, primeiro determine a existência ou não de um circuito
ou caminho de Hamilton. Se existir um exiba-o.

9.4 Respostas dos Exercı́cios


Resposta do Exercı́cio 27. Existe um circuito de Hamilton a, b, c, d, e, f, g, a, b) Existe um circuito de Hamilton
k, j, l, m, i, h, k, c) Não existe circuito ou caminho de Hamilton

70
9.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 9. Links das Vı́deo Aulas Referentes ao Capı́tulo 9


Circuitos e Caminhos de Hamilton
Teoremas Assegurando a Existência de Circuitos de Hamilton

71
Plano de Aula
Aula 10
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: O Problema do Caminho Mais Curto.
Duração: 100 min
Objetivos:
- Apresentar o problema de se obter o caminho de menor custo entre dois vértices;
- Apresentar o algoritmo de Dijkstra;
- Utilizar o algoritmo de Dijkstra.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

72
Capı́tulo 10

O Problema do Caminho Mais Curto

Muitos problemas podem ser modelados usando grafos com pesos atribuı́dos às suas bordas. Neste capı́tulo
estaremos interessados em descobrir o trajeto entre dois vértices que minimiza a soma destes pesos.

Exemplo 54. Considere um sistema de linhas frete de mercadorias terrestres em certa região composta por 8 cidades.
Foi montado um modelo via grafos representando cidades por vértices e as tarifas aplicadas (em R$/ton) entre elas
como sendo o peso das arestas conforme ilustrado na Figura 10.1:

Figura 10.1: Tarifas em R$/ton entre oito cidades.

Note que há diversas opções de trajetos entre duas cidades quaisquer. Uma empresa que atue nesta região poderia
facilmente tabelar o valor de frete entre quaisquer duas cidades, são poucas. Contudo, isto poderia se tornar inviável
em situações nas quais o número de cidades pode ser maior. Ao final deste capı́tulo aplique os conhecimento adquiridos
para obter a rota de menor custo entre as cidades c1 e c6.

10.1 Algoritmo Para a Determinação do Caminho Mais Curto


A seguir apresentaremos um exemplo no qual são colocados os princı́pios gerais para a utilização do algoritmo
de Dijkstra. O algoritmo de Dijkstra inicialmente encontra o comprimento de um caminho mais curto de v0 a um
segundo vértice, depois o comprimento mais curto de v0 até um segundo vértice, e assim por diante, até que o caminho
de menor comprimento de v0 até que o vértice objetivo vf seja encontrado.

73
Exemplo 55. Qual é o caminho de comprimento mais curto entre a e f no grafo ponderado mostrado na Figura 10.2?

Figura 10.2: Grafo ponderado simples.

Solução: Embora o caminho mais curto seja facilmente encontrado por inspeção (neste caso!), desenvolveremos algumas
ideias úteis. Nós resolveremos esse problema encontrando o comprimento mais curto de um vértice para vértices
sucessivos, até que f seja alcançado. Inicialmente escolhemos o vértice de partida como sendo a. Neste caso, os
vértices b e c são adjacentes a este. Cada um deles contribui para a formação de duas trajetórias C1 : a, b → 6 e
C2 : a, c → 4. Neste caso, a trajetória C2 nos parece mais atrativa que a trajetória C1 para atualizarmos (menor
custo entre ambas). Neste caso, a única adjacência do vértice c (final da trajetória C2 ) é dado pelo vértice e. Assim,
temos a trajetória C3 : a, c, e → 9 que atualiza C2 . Note que temos duas trajetórias a analisar para continuar C1 e
C3 . Neste caso, optemos por aquela de menor custo, isto é, C1 . Note que e e d pertencem à adjacência do vértice b
(vértice final de C1 ). Assim, temos as trajetórias C4 : a, b, d → 11 e C5 : a, b, e → 11. Note que esta última, C5 tem o
vértice final coincidente com o vértice final de C3 . Neste caso, optamos por manter C3 pois tem comprimento menor
que C5 . Após esta etapa, temos dois caminhos a analisar uma possı́vel atualização C4 e C3 . Neste caso, optamos
por C3 pois tem comprimento menor. Note que C3 possui duas adjacências não pertencentes a ele b e f . Isto nos
fornece as trajetórias C6 : a, c, e, b → 14 que é descartada por conta de C1 e a trajetória C7 : a, c, e, f → 12. Nos
restam dois caminhos a analisar uma possı́vel atualização C4 e C7 (se bem que esse já terminou!). Note que C4 tem
comprimento menor e portanto deve ser atualizado. A única adjacência possı́vel para C4 é o vértice f o que nos fornece
o caminho C8 : a, b, d, f → 15. Por fim, temos uma disputa entre os caminhos C7 e C8 o qual optaremos por C7 que
possui comprimento menor. Assim, temos obtido o trajeto mı́nimo entre a e f ao custo de 12 por meio do caminho
C7 : a, c, e, f .
A Figura 10.3 ilustra a ordem das escolhas feitas:

Figura 10.3: Ordem das escolhas feitas.

Por fim, a seguinte tabela nos ajuda a entender o processo de forma mais prática.

74
Caminho vértices comprimento Atualização Cancelamento
C1 a, b 6 AT(2) : C1 → C4 ou C1 → C5 Não
C2 a, c 4 AT(1) : C2 → C3 Não
C3 a, c, e 9 AT(3) : C3 → C6 ou C3 → C7 Não
C4 a, b, d 11 AT(4) : C4 → C8 Não
C5 a, b, e 11 - Sim, para C3
C6 a, c, e, b 14 - Sim, para C1
C7 a, c, e, f 12 Trajetória mı́nima Não
C8 a, b, d, f 15 - Sim, para C7

As ideias expostas acima são a base do algoritmo de Dijkstra apresentado a seguir:

Algoritmo 2. Dijkstra
. procedure (G: grafo simples conexo com todos os pesos positivos)
. { G tem vértices v0 , v1 , · · · vn , · · · e pesos w(vi , vj ) em que w(vi , vj )∞ se (vi , vj ) não for uma aresta de G }
. for i := 1 to n
. L(vi ) := ∞
. L(a) = 0
. S := ∅
. {os rótulos agora são inicializados de modo que o rótulo de a seja 0 e todos os outros sejam ∞, e S seja o
conjunto vazio}
. while vn ∈
/S
. begin
. u := um vértice que não está em S, com L(u) mı́nimo
. S := S ∪ {u}
. for todos os vértices v que não estão em S
. if L(u) + w(u, v) < L(v) then L(v) := L(u) + w(u, v)
. {isso adciona um vértice S com rótulo mı́nimo e atualiza os rótulos dos vértices que estão em S }
. end {L(vn ) = comprimento de um caminho mais curto de v0 para vn }

Vejamos mais um exemplo para fixarmos o algoritmo de Dijkstra.

Exemplo 56. Qual é o caminho de comprimento mais curto entre a e f no grafo ponderado mostrado na Figura 10.4?

Figura 10.4: Grafo ponderado simples.

Solução: A ordem de escolha dos caminhos está exposta na Figura 10.5:

75
Figura 10.5: Ordem das escolhas feitas.

A tabela a seguir nos ajudará a compreender o que ocorreu em cada passo:

Caminho vértices (S) comprimento Atualização Cancelamento


C1 a, b 6 - Sim, para C3
C2 a, c 4 AT(1) : C1 → C3 ou C1 → C4 ou C1 → C5 Não
C3 a, c, b 5 AT(2) : C3 → C6 Não
C4 a, c, d 12 - Sim, para C6
C5 a, c, e 15 - Sim, para C7
C6 a, c, b, d 10 AT(3) : C6 → C7 ou C6 → C8 Não
C7 a, c, b, d, e 13 AT(4) : C7 → C9 Não
C8 a, c, b, d, f 16 - Sim, para C9
C9 a, c, b, d, e, f 15 Trajetória mı́nima Não

O Programa 8, em linguagem Python 3, apresenta o caminho de menor custo entre dois vértices arbitrários
usando algoritmo de Dikstra.

O Programa 9, em linguagem Python 3, apresenta os menores custos entre um vértice arbitrário e todos os
outros vértices de um grafo.

10.2 Exercı́cios
Exercı́cio 28. Aplique o algoritmo de Dijkstra para obter o caminho de menor soma dos pesos entre os vértices a e
f no grafo ponderado fornecido.

76
Exercı́cio 29. Aplique o algoritmo de Dijkstra para obter o caminho de menor soma dos pesos entre os vértices a e
h no grafo ponderado fornecido.

10.3 Respostas dos Exercı́cios


Resposta do Exercı́cio 28. Caminho a, d, e, f com soma dos pesos 5.

Resposta do Exercı́cio 29. Caminho a, c, d, e, g, h com soma dos pesos 16.

77
10.4 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 10. Links das Vı́deo Aulas Referentes ao Capı́tulo 10


O Problema do Caminho Mais Curto
Algoritmo de Dijkstra
Exemplo Envolvendo o Algoritmo de Djikstra

78
Plano de Aula
Aula 11
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Grafos Planares.
Duração: 100 min
Objetivos:
- Entender o conceito de grafo planar;
- Apresentar condições para se identificar um grafo planificável.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

79
Capı́tulo 11

Grafos Planares

11.1 Problematizando
Considere o problema de unir três casas a cada um dos três utilitários separados, água, gás e eletricidade, como
mostra a Figura 11.1. É possı́vel unir, de forma “plana”, essas casas e utilitários para que nenhuma das conexões
seja cruzada? Este problema pode ser modelado usando o grafo bipartido completo K3,3 . A questão original pode ser
reformulada como: O K3,3 pode ser desenhado no plano de modo que não haja duas de suas bordas cruzadas?

Figura 11.1: Três casas e três utilitários.

Nesta seção, estudaremos a questão: “Como saber se um dado grafo pode ser desenhado no plano sem cruzar as
arestas?”. Há sempre muitas maneiras de representar um grafo. Quando é possı́vel encontrar pelo menos uma maneira
de representar este grafo em um plano sem nenhuma borda cruzando?

Definição 20. Um grafo é chamado planar se puder ser desenhado no plano sem nenhuma aresta cruzando (onde um
cruzamento de arestas é a interseção das linhas ou arcos que os representam em um ponto diferente de seu ponto final
comum). Esse desenho é chamado de representação planar do grafo.

Exemplo 57. Note que K4 é planar.

Figura 11.2: Planificação de K4 .

80
A planaridade dos grafos também é útil no projeto de redes rodoviárias. Suponha que queremos conectar um grupo
de cidades por estradas. Podemos modelar uma rede viária conectando essas cidades usando um grafo simples com
vértices representando as cidades e as arestas representando as rodovias que as conectam. Podemos construir essa rede
rodoviária sem usar passagens subterrâneas ou viadutos caso o grafo resultante seja plano. Qual o custo de construção
de cada 1 km de túnel, e de viaduto? Bem mais caro que de uma estrada comum, não?

11.2 Condições Para a Planaridade


Uma representação planar de um grafo divide o plano em regiões, incluindo uma região não limitada. Euler mostrou
que todas as representações planares de um grafo dividem o plano no mesmo número de regiões. Ele conseguiu isso
encontrando uma relação entre o número de regiões, o número de vértices e o número de arestas de um grafo planar.
Este resultado é expresso no teorema a seguir.

Teorema 13. Seja G um grafo simples planar conexo com e bordas e v vértices. Seja r o número de regiões em uma
representação planar de G. Então r = e − v + 2.

Exemplo 58. Uma representação planar do grafo G mostrado na Figura 11.3 divide o plano em seis regiões (a parte
externa ao grafo também conta!).

Figura 11.3: Grafo G e sua planificação.

Note que o grafo G conta com 8(v) vértices e 12(e) arestas. Por fim,

6 = 12 − 8 + 2,

exatamente como esperado.

Exemplo 59. Suponha que um grafo simples planar conexo tenha 6 vértices, cada um de grau 4. Em quantas regiões
uma representação deste grafo planar divide o plano?
Solução: Como a soma dos graus dos vértices é igual a duas vezes o número de arestas (Teorema 1 repassando m para
e), temos que
24
4 · 6 = 2e ⇔ e == 12
2
. Consequentemente, da fórmula de Euler (Teorema 13), o número de regiões é r = e − v + 2 = 12 − 6 + 2 = 8.

O Programa 10 exibe o número de regiões que um grafo planar divide o plano.

Corolário 1. Se G é um grafo simples planar conectado com e arestas e v vértices, onde v ≥ 3, então e ≤ 3v − 6.

Exemplo 60. Mostre que K5 não é plano usando o Corolário 1.


Solução: O grafo K5 tem cinco vértices e dez arestas. No entanto, a desigualdade e ≤ 3v − 6 não é satisfeita para este
grafo porque e = 10 e 3v − 6 = 9. Portanto, K5 não é planar.

81
Revisando 1. A contrapositiva de uma proposição (teorema, corolário ou lema) da forma P ⇒ Q é a proposição
da forma ¬Q ⇒ ¬P e tem valor logicamente equivalente à primeira.

Palavra do Mestre 8. Note que, no Exemplo 60, usamos a contrapositiva do Corolário 1. De modo geral
usaremos este corolário para mostrar que um grafo não é planar. O mesmo se dará com os dois corolários
seguintes! Para exemplificar, vejamos a contrapositiva do Corolário 1: “Se G é um grafo com e arestas e v
vértices tais que e > 3v − 6, então G não é simples ou não é planar ou não é conexo.”No Exemplo 60 sabiamos
que K5 era simples e conexo além de conhecermos o número de vértices e arestas. Portanto só restava a ele
não ser planar. Destrinchando, o Corolário 1 pode ser visto simbolicamente como P ∧ Q ∧ R ⇒ S com P : G
é um grafo simples, Q: G é um grafo conexo, R: G é um grafo planar e S: e ≤ 3v − 6. Portanto, tomando a
contrapositiva, temos:
¬S ⇒ ¬(P ∧ Q ∧ R) ≡ ¬S ⇒ ¬P ∨ ¬Q ∨ ¬R

Como dito, ¬P é falsa pelo enunciado (G é simples), ¬Q é falsa pelo enunciado (G é conexo) e portanto ¬R tem
que ser verdadeira, isto é, G não será planar. Reflita bem sobre o que foi exposto aqui.

Com base nas ideias expostas no tópico Palavra do Mestre 8 usaremos o Corolário 3 em sua contrapositiva de
modo a mostrar que um dado grafo simples e conexo não é planar quando e > 3v − 6 (ou que um grafo simples e
planar não pode ser conexo ou que um grafo conexo e planar não pode ser simples, em qualquer caso, e > 3v − 6).
Temos, na mesma linha, o resultado a seguir.

Corolário 2. Se um grafo simples planar conectado tiver e arestas e v vértices com v ≥ 3 e nenhum circuito de
comprimento três, então e ≤ 2v − 4.

Exemplo 61. Use o Corolário 2 para mostrar que K3,3 não é plano.
Solução: Como K3,3 não possui circuitos de comprimento três (isso é fácil de ver pois é bipartido), o Corolário 2 pode
ser usado. K3,3 tem seis vértices e nove arestas. Como e = 9 e 2v − 4 = 8, o Corolário 2 mostra que K3,3 é não plano.

Corolário 3. Se G é um grafo simples planar conectado, então G tem um vértice de grau que não excede cinco.

A utilização do Corolário 3 segue a mesma linha dos corolários anteriores nos quais são consideradas suas contra-
positivas. Assim, um grafo cujos vértices apresentem graus superiores a cinco seja simples e conexo, este não poderá
ser planar. Caso seja planar e conexo este não poderá ser simples e, por fim, caso seja simples e planar este não poderá
ser conexo. Note que a ‘simplicidade’ e a conexidade de um grafo podem ser trivialmente verificadas de tal sorte que
o primeiro caso é o que nos interessa.

Teorema 14. Um grafo não é plano se, e somente se, contiver um subgrafo homeomórfico para K3,3 ou K5 .

Revisando 2. A grosso modo, um hoemomorfismo é uma transformação que preserva a forma topológica.
A Figura 11.4 ilustra um homeomorfismo existente entre um toro (câmara de ar de um pneu) e uma xı́cara.
Outros homeomorfismo clássicos se dão entre um quadrado e uma circunferência e o triplo homeomorfismo
triplo existente entre um cilindro, uma esfera e um cone conforme ilustrados na Figura 11.5. Formalmente,
um homeomorfismo é definido como: Dois espaços topológicos dizem-se homeomorfos se existir uma aplicação
entre esses espaços que seja contı́nua, invertı́vel e a sua inversa seja contı́nua. Homeomorfismos preservam
número de divisões do plano/espaço.

82
Figura 11.4: Homeomorfismo entre um toro e uma xı́cara.

Figura 11.5: Mais homeomorfismos.

Exemplo 62. Determine se o grafo G mostrado na Figura 11.6 é plano.

Figura 11.6: Grafo não orientado G.

Solução: G tem um subgrafo H homeomórfico a K5 . H é obtido excluindo b e he todas as arestas incidentes com esses
vértices juntamente com uma das arestas que ligam os vértices i e c. H é homeomórfico a K5 como pode ser visto na
Figura 11.7.

Figura 11.7: Homeomorfismo entre K5 e H.

83
11.3 Exercı́cios
Exercı́cio 30. Cinco casas podem ser conectadas a dois utilitários (água e luz, por exemplo) sem conexões cruzadas?

Exercı́cio 31. Desenhe, se possı́vel, o grafo a seguir sem que suas arestas se cruzem.

Exercı́cio 32. Determine se cada um dos grafos a seguir é planar. Em caso afirmativo, desenhe-o de modo que
nenhuma aresta se cruze.

11.4 Respostas dos Exercı́cios


Resposta do Exercı́cio 30. Sim.

Resposta do Exercı́cio 31. .

84
Resposta do Exercı́cio 32. a) Não, b) Sim, c) Não, d) Sim, e) Não. As planificações dos grafos dados nos itens b)
e d) são dadas a seguir:

85
11.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 11. Links das Vı́deo Aulas Referentes ao Capı́tulo 11


Introdução ao Estudo dos Grafos Planares
Número de Regiões em Uma Representação Planar
Resultados Sobre Grafos Planares - Parte 1
Resultados Sobre Grafos Planares - Parte 2

86
Plano de Aula
Aula 12
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Coloração de Grafos.
Duração: 100 min
Objetivos:
- Apresentar o conceito de coloração de grafos;
- Relacionar os conceitos de coloração e planariedade de um grafo.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

87
Capı́tulo 12

Coloração de Grafos

12.1 Problematizando
Problemas relacionados à coloração de mapas de regiões, como mapas de partes do mundo, geraram muitos
resultados na teoria dos grafos. Quando um mapa é colorido, duas regiões com uma borda comum, como regra, devem
ter cores diferentes. Uma maneira de garantir que duas regiões adjacentes nunca tenham a mesma cor é usar uma
cor diferente para cada região. No entanto, isso é ineficiente e em mapas com muitas regiões, seria difı́cil distinguir
cores semelhantes. Em vez disso, busca-se a utilização do menor número de cores possı́veis. Considere o problema
de determinar o menor número de cores que podem ser usadas para colorir um mapa de modo que regiões adjacentes
nunca tenham a mesma cor. Por exemplo, para o mapa mostrado na Figura 12.1 pode ser colorido com no mı́nimo
quantas cores de modo que regiões adjacentes apresentem cores diferentes?

Figura 12.1: Mapa.

O mada dado na Figura 12.1 pode ser representado por um grafo. Neste caso, cada região do mapa será representada
por um vértice. Existirá uma borda conectando dois vértices se as regiões representadas por esses vértices apresentarem
uma fronteira comum. Se duas regiões se tocarem em um só ponto (modelo real inviável) elas não serão consideradas
adjacentes. Segue o grafo associado ao mapa da Figura 12.1:

Figura 12.2: Representação Gráfica do Mapa da Figura 12.1.

88
O problema de colorir as regiões de um mapa é equivalente ao problema de colorir os vértices do grafo associado, de
modo que nenhum dos dois vértices adjacentes neste grafo tenham a mesma cor. Nós agora definimos uma coloração
de grafos.

12.2 Coloração
Definição 21. Uma coloração de um grafo simples é a atribuição de uma cor a cada vértice do grafo, de modo que
não haja dois vértices adjacentes atribuı́dos à mesma cor.

Definição 22. O número cromático de um grafo é o menor número de cores necessárias para uma coloração deste
grafo. O número cromático de um grafo G é denotado por χ(G). (Aqui χ é a letra grega chi.)

Exemplo 63. Determine o número mı́nimo de cores que se pode usar para colorirmos o mapa dado na Figura 12.1.
Solução: Tal problema é equivalente a determinarmos o número cromático do grafo G associado ao mapa em questão
conforme descrito na Figura 12.2. Pois bem, comecemos atribuindo a cor azul ao vértice A. Como B é adjacente
a A(azul) devemos usar uma segunda cor, digamos a vermelha. Note que C é adjacente tanto a A(azul) quanto a
B(vermelho). Neste caso, necessitamos uma terceira cor, digamos verde. Prosseguindo, temos que D é adjacente
a A(azul) e a C(verde). Neste caso, não podemos usar as cores azul ou verde, mas podemos usar a cor vermelha.
Lembre-se que estamos interessados no menor número de cores. O vértice E é adjacente aos vértices B(vermelho) e
C(verde) e portanto não podemos usar as cores tais cores, mas ainda podemos usar a cor azul. Por fim, o vértice F é
adjacente os vértices C(verde), D(vermelho) e E(azul) e, sendo assim, precisamos de uma quarta cor, digamos a cor
cinza. Portanto, o número cromático do grafo G é dado por χ(G) = 4. Acompanhe as cores na Figura 12.3.

Figura 12.3: Coloração Gráfica do Grafo da Figura 12.2.

Teorema 15. O número cromático de um grafo planar não é maior que quatro.

O Teorema 15 estabelece uma cota superior para o número cromático de um grafo planar. Podemos então concluir
que é possı́vel pintar qualquer mapa de modo que regiões vizinhas não tenham a mesma cor com apenas 4 cores,
pois todo mapa admite uma representação planar (Consegue ver?). Além disso, temos uma ferramenta bastante útil
para mostrarmos que um certo grafo G não é planificável alem daquelas apresentadas no capı́tulo anterior. Basta
observarmos se χ(G) > 4. Novamente a contrapositiva! Contudo, tome cuidado ao pensar o contrário. Nem todo
grafo com número cromático menor ou igual a 4 é planar. Lembre-se do grafo bipartido K3,3 que não é planar mas
χ (K3,3 ) = 2 < 4.

Exemplo 64. Exiba o número cromático de um ciclo Cn .


Solução: Caso n seja par (começando a contagem de 1), temos que apenas duas cores são necessárias. De fato, para
n par, temos que os vértices vi , i = 1, 3, 5, · · · n − 1 serão pintados, digamos, com a cor azul, por exemplo. Os vértices
vi = 2, 4, 6, · · · n − 2, n serão pintados com a cor vermelha. Por outro lado, para n ı́mpar, temos que os vértices

89
vi , i = 1, 3, 5, · · · n − 2 são pintados com, digamos, a cor azul. Os vértices vi = 0, 2, 4, · · · , n − 1 serão pintados com a
cor vermelha. Note que o vértice vn é adjacente aos vértices v1 (azul) e vn−1 (vermelho) donde segue a necessidade de
uma terceira cor. Assim, χ(Cn ) = 2 se n for par e χ(Cn ) = 3 se n for ı́mpar.

Exemplo 65. Exiba o número cromático de Kn .


Solução: Uma coloração de Kn pode ser construı́da usando n cores, atribuindo uma cor diferente a cada vértice. Existe
uma coloração usando menos cores? A resposta é não. Dois vértices não podem ser atribuı́dos a mesma cor, porque
cada dois vértices desse grafo são adjacentes. Portanto, o número cromático de Kn é n. Isto é, χ(Kn) = n. Lembre-se
que Kn não é planar quando n ≥ 5 (Teorema 14 observando o fato que Kn é subgrafo de Kn+1 ), então este resultado
não contradiz o teorema das quatro cores.

Exemplo 66. Qual é o número cromático do grafo bipartido completo Km,n , onde m e n são inteiros positivos?
Solução: Km,n é bipartido. Logo, somente duas cores são necessárias.

Infelizmente, não existe um algoritmo eficiente disponı́vel para colorir um grafo com um número mı́nimo de cores,
pois o problema é conhecido como NP Completo. Existem algoritmos aproximados para resolver o problema. O que
temos são algoritmos gulosos1 .

O Programa 11, em linguagem Python, apresenta um algoritmo guloso básico para atribuir cores. Não garante
o uso de cores mı́nimas, mas garante um limite superior no número de cores. O algoritmo básico nunca usa mais
de d + 1 cores onde d é o grau máximo de um vértice no grafo dado.

12.3 Exercı́cios
Exercı́cio 33. Determine o número cromático de cada um dos grafos a seguir:

Exercı́cio 34. Qual a coloração mı́nima para um grafo não planar?

Exercı́cio 35. Caracterize os grafos que possuem número cromático igual a 1.

1 Um algoritmo guloso é qualquer algoritmo que segue a heurı́stica de resolução de problemas de fazer a escolha localmente ideal em cada
estágio. Em muitos problemas, uma estratégia gulosa não produz uma solução ótima, mas uma heurı́stica gulosa pode produzir soluções
localmente ótimas que se aproximam de uma solução globalmente ótima em um perı́odo de tempo razoável.

90
Exercı́cio 36. Qual o menor número de cores que se pode pintar cada uma das figuras a seguir de modo que nenhuma
região tenha a mesma cor que outra com a qual faça fronteira?

Exercı́cio 37. Veja a definição a seguir:

Definição 23. Uma coloração de aresta de um grafo é uma atribuição de cores às arestas de forma que as arestas
incidentes com um vértice comum sejam atribuı́das com cores diferentes. O número cromático de aresta de um grafo é
o menor número de cores que podem ser usadas em uma coloração de borda do grafo. O número cromático da aresta
de um grafo G é denotado por χ0 (G).

Determine o número cromático de aresta dos grafos do Exercı́cio 33.

12.4 Respostas dos Exercı́cios


Resposta do Exercı́cio 33. a) 3, b) 4, c) 5

Resposta do Exercı́cio 34. 2

Resposta do Exercı́cio 35. grafo com v ≥ 1 e e = 0 (v = número de vértices e e = número de arestas)

Resposta do Exercı́cio 36. a) 3, b) 2

Resposta do Exercı́cio 37. a) 3, b) 4, c) 6

91
12.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 12. Links das Vı́deo Aulas Referentes ao Capı́tulo 12


Coloração de Grafos
Exemplos e Resultados Sobre Coloração de Grafos

92
Plano de Aula
Aula 13
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Introdução ao Estudo de Árvores.
Duração: 100 min
Objetivos:
- Apresentar o conceito de árvore;
- Definir o que vem a ser uma árvore com raiz;
- Apresentar o conceito de árvores m-cheias.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

93
Capı́tulo 13

Introdução ao Estudo de Árvores

13.1 Árvores
Agora estudaremos alguns grafos especiais conhecidos como árvores. Tais grafos bastante úteis na ciência da
computação sendo bastante empregadas em muitas situações. Por exemplo, as árvores são usadas para construir
algoritmos eficientes desempenhando a tarefa de localizar itens em uma lista. Eles podem ser usados em algoritmos
possibilitando a construção de códigos eficientes que economizam custos na transmissão e no armazenamento de dados.
As árvores são usadas para modelar procedimentos realizados usando uma sequência de decisões. A construção desses
modelos pode ajudar a determinar a complexidade computacional dos algoritmos com base em uma sequência de
decisões.

Definição 24. Uma árvore é um grafo não direcionado conectado, sem circuitos simples.

Exemplo 67. Quais dos grafos mostrados na Figura 13.1 são árvores?

Figura 13.1: Grafos que são árvores e grafos que não são árvores.

Solução: F e G são árvores, porque ambos são grafos conectados sem circuitos simples. H não é uma árvore pois
a, b, d, c, a é um circuito simples neste grafo. Finalmente, I não é uma árvore pois não é conexos (componentes
I1 = {a, b, c, f } e I2 = {d, e, g}).

Teorema 16. Um grafo não orientado é uma árvore se, e somente se, houver um caminho simples e único entre dois
dos seus vértices.

Qualquer grafo conexo que não contenha circuitos simples é uma árvore. E os grafos que não contêm circuitos
simples que não estão necessariamente conectados? Esses grafos são chamados de florestas e possuem a propriedade
de que cada um de seus componentes conectados é uma árvore. A figura 13.2 exibe uma floresta.

94
Exemplo 68. O grafo a seguir representa uma floresta.
Note que o grafo G é composto por duas árvores G1 = {a, b, c, d, e, f } e G2 = {g, h, i, j, k}. Observe que a “caixa”ao

Figura 13.2: Exemplo de floresta.

redor das árvores G1 e G2 serve apenas para delimitar as componentes uma vez que trata-se de um grafo desconexo.

13.2 Árvores Enraizadas


Em muitas aplicações de árvores, um determinado vértice de uma árvore é designado como raiz. Uma vez que
especificamos uma raiz, podemos atribuir uma direção a cada aresta da seguinte maneira. Como existe um caminho
único da raiz para cada vértice do grafo (pelo Teorema 16, direcionamos cada borda para fora da raiz. Assim, uma
árvore junto com sua raiz produz um grafo direcionado chamado árvore enraizada.

Definição 25. Uma árvore com raiz é uma árvore na qual um vértice foi designado como raiz e toda aresta é orientada
para longe da raiz.

É costume se fazer alguma analogia entre a botânica e árvores genealógica com alguns elementos que compõe as
árvores. Consideremos uma árvore enraizada T com raiz. Diremos que o pai de um vértice v, diferente da raiz, é o
único vértice u de T tal que existe uma única aresta orientada de u para v. Obviamente, se u é o pai de v, então v é o
filho de u. Vértices com um mesmo pai são ditos irmãos. Os ancestrais de um vértice diferente da raiz são os vértices
no caminho da raiz para este vértice, excluindo o próprio vértice e incluindo a raiz. Os descendentes de um vértice v
são aqueles vértices que possuem v como ancestral. Um vértice de uma árvore com raiz é chamado de folha se não
tiver filhos. Vértices que têm filhos são chamados vértices internos. A raiz é um vértice interno, a menos que seja o
único vértice no grafo, caso em que é uma folha.

Exemplo 69. Na árvore enraizada T (com raiz a) mostrada na Figura 13.3, encontre o pai de e, os filhos de d, os
irmãos de b, todos os ancestrais de j, todos descendentes de c, todos os vértices internos e todas as folhas.

Figura 13.3: Árvore enraizada T .

95
Solução: O pai de e é c. Os filhos de d são g e h. Os irmãos de b são c e d. Os ancestrais de j são a, c e e. Os
descendentes de c são e, f , i e j. Os vértices internos são a, c, d, e e. As folhas são b, f , g, h, i e j.

Definição 26. Uma árvore com raiz é chamada de árvore de grau m se cada vértice interno não tiver mais que m
filhos. A árvore de grau m é dita m-cheia se cada vértice interno tiver exatamente m filhos. Uma árvore de grau 2 é
chamada de binária.

Exemplo 70. As árvores enraizadas T1 , T2 e T3 com raı́zes a, g e n, respectivamente são apresentadas na Figura
13.4. Classifique-as segundo a Definição 26:

Figura 13.4: Quatro árvores enraizadas.

Solução: T1 é uma árvore ternária não cheia pois, o vértice a possui 3 filhos (vértice interno com o maior número de
filhos) mas o vértice c possui apenas dois filhos. T2 é uma árvore binária cheia pois, cada um dos seus vértices internos
tem dois filhos. Em T3 cada vértice interno tem três filhos e, portanto, T3 é uma árvore ternária cheia.

13.3 Exercı́cios
Exercı́cio 38. Identifique quais dos grafos F , G e H a seguir são árvores, florestas ou nenhum. Justifique.

Exercı́cio 39. Considerando os grafos dados no Exercı́cio 38 transforme os grafos que não são uma árvore em uma
pela adição ou exclusão de uma única aresta.

Exercı́cio 40. Desenhe, se possı́vel, as árvores solicitadas.


a) Uma árvore com 5 vértices internos e 8 folhas.
b) Uma árvore contendo 3 pais e 8 filhos.

96
Exercı́cio 41. Dada a árvore enraizada T com raiz a

determine:
a) os filhos de i
b) o pai de g
c) os ancestrais de l
d) os descendentes de h
e) os vértices internos
f) as folhas

Exercı́cio 42. Desenhe, se possı́vel, as árvores solicitadas.


a) Uma árvore ternária completa com 3 filhos e 9 folhas.
b) Uma árvore binária completa 6 vértices internos e 11 arestas.

13.4 Respostas dos Exercı́cios


Resposta do Exercı́cio 38. a) Não é árvore, b) É árvore, c) É floresta.

Resposta do Exercı́cio 39. a) Exclusão da aresta {c, f }, c) Adição da aresta {o, n}.

Resposta do Exercı́cio 40. .

Resposta do Exercı́cio 41. a) j, k e l; b) c; c) a, d, h e i; d) i, j, k e l; e) a, b, c, d, h e i; f) e, f , g, j, k, l.

97
Resposta do Exercı́cio 42. .

98
13.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 13. Links das Vı́deo Aulas Referentes ao Capı́tulo 13


Introdução ao Estudo de Árvores
Árvores Enraizadas
Grau de Uma Árvore Enraizada

99
Plano de Aula
Aula 14
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Propriedades das Árvores.
Duração: 100 min
Objetivos:
- Apresentar propriedades das árvores relacionando número de vértices, vértices internos, folhas etc;
- Apresentar o conceito de árvore balanceada.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

100
Capı́tulo 14

Propriedades das Árvores

Veremos neste capı́tulo algumas propriedades relacionando as quantidades de vértices de folhas e de vértices
internos.

Teorema 17. Uma árvore com n vértices tem n − 1 arestas.

Teorema 18. Uma árvore m-ária completa com i vértices internos contém n = mi + 1 vértices.

Exemplo 71. É possı́vel existir uma árvore binária completa com 6 vértices internos e 11 arestas? Se sim, desenhe-a.
Solução: Segundo o Teorema 17 uma árvore com 11 arestas possui 12 vértices. Pelo Teorema 18 temos que esta árvore
n−1
deve possuir i = m vértices internos. Substituindo os valores n = 12 e m = 2 (árvores binária) temos:

12 − 1 11
i= =
2 2
que não é uma divisão possı́vel considerando que o número de vértices internos é inteiro. Logo, tal árvore não pode
existir.

n−1 (m−1)n+1
Teorema 19. Uma árvore m-ária completa com n vértices tem i = m vértices internos e l = m folhas.

Exemplo 72. Suponha que alguém comece uma carta em cadeia. Cada pessoa que recebe a carta é solicitada a enviar
três cartas iguais para outras pessoas. Algumas pessoas fazem isso, mas outras não enviam cartas. Quantas pessoas
viram a carta, incluindo a primeira pessoa, se ninguém receber mais de uma carta e se a carta-corrente termina depois
de haver 91 pessoas que a leram, mas não a enviaram? Quantas pessoas enviaram cartas?
Solução: A carta em cadeia pode ser representada usando uma árvore quaternária. Os vértices internos correspondem
às pessoas que enviaram a carta, e as folhas correspondem a pessoas que não a enviaram. Como 91 pessoas não
enviaram a carta, o número de folhas nessa árvore enraizada é l = 91. Podemos usar o Teorema 19 com m = 3 e
obtermos o valor de n. Pois bem,

(m − 1)n + 1 (3 − 1)n + 1 272


l= ⇒ 91 = ⇒ 273 = 2n + 1 ⇒ 2n = 272 ⇒ n = ⇒ n = 136.
m 3 2
Portanto, 136 pessoas viram a carta. Novamente, usando o Teorema 19, temos

n−1 136 − 1
i= ⇒i= ⇒ i = 45.
m 3
Assim, 45 enviaram cartas.

101
l−1
Exemplo 73. Mostre que em uma árvore m-ária completa com l folhas temos i = m−1 vértices internos.
(m−1)n+1
Solução: Decorre do Teorema 19 que o número total de folhas em uma árvore m-ária completa é dada por l = m
em que n é o número total de vértices desta árvore. Além disso, o Teorema 17 assegura que, para uma árvore m-ária
qualquer, temos que o número total de vértices é dado por n = mi + 1. Substituindo esta última relação na primeira
temos:
(m − 1)n + 1 (m − 1)(mi + 1) + 1 m2 i + m − mi − 1 + 1
l= = = =
m m m
m2 i + m − mi m(mi + 1 − i)
= = = mi − i + 1 = i(m − 1) + 1
m m
Assim, obtemos a relação l = i(m − 1) + 1. Isolando i, temos o resultado desejado. De fato,

l−1
l = i(m − 1) + 1 ⇐ i(m − 1) = l − 1 ⇐ i = .
m−1
Geralmente, é desejável usar árvores com raiz que sejam balanceadas para que as subárvores em cada vértice
contenham caminhos com aproximadamente o mesmo comprimento. Algumas definições tornarão esse conceito claro.
O nı́vel de um vértice v em uma árvore com raiz é o comprimento do caminho único desde a raiz até este vértice. O
nı́vel da raiz é definido como zero. A altura de uma árvore com raiz é o máximo dos nı́veis de vértices. Em outras
palavras, a altura de uma árvore com raiz é o comprimento do caminho mais longo desde a raiz até qualquer vértice.

Exemplo 74. Considere a árvore T com raiz a mostrada na Figura 38.

Figura 14.1: Uma árvore enraizada.

a) Determine os nı́veis dos vértices e, f e i.


b) Determine a altura de T .
Solução: a) O nı́vel de e é igual a 2 pois é necessário percorrer um caminho de comprimento 2 até a chegar a este
vértice passando pela raiz (arestas {a, b} e {b, e}); o nı́vel do f é igual a 2; o nı́vel de i é igual a 3 b) A altura da
árvore T é igual a 4.

Definição 27. Uma árvore m-ária da altura h é dita balanceada se todas as folhas estiverem nos nı́veis h ou h − 1.

Exemplo 75. Quais das árvores enraizadas mostradas na Figura 14.2 estão balanceadas?
Solução: T1 é balanceada, pois todas as suas folhas estão nos nı́veis 2 ou 3. T2 é balanceada, pois todas suas folhas
estão no nı́vel 2. Finalmente, T3 não é balanceada, existem folhas nos nı́veis 1, 2 e 3 o que fere a Definição 27.

102
Figura 14.2: Algumas árvores enraizadas.

Exemplo 76. A árvore T , dada no Exemplo 74 é balanceada? Se não, pode-se-a mudar sua raiz de modo a torná-la
balanceada?
Solução: Não, pois a altura de T é igual a 4 e nem todos suas folhas estão nos nı́veis 4 ou 3(= 4 − 1). Por exemplo, a
folha e que está no nı́vel 2. Note que podemos balanceá-la ao repassarmos a raiz para o vértice d. Neste caso, todas
as folhas resultantes estarão no nı́vel 3 conforme podemos ver na Figura 14.3:

Figura 14.3: Árvore do Exemplo 74 com raiz repassada ao vértice d.

14.1 Exercı́cios
Exercı́cio 43. Quantas arestas tem uma árvore com 752 vértices?

Exercı́cio 44. Quantas arestas tem uma árvore binária completa com 300 vértices internos?

Exercı́cio 45. Suponha que 1000 pessoas participem de um torneio de xadrez. Use um modelo de árvore enraizada
do torneio para determinar quantos jogos devem ser jogados para determinar um campeão, se um jogador é eliminado
após uma perda e os jogos são jogados até que apenas um participante não tenha perdido. (Suponha que não haja
vı́nculos)
1 Outros dois resultados uteis relacionados à árvores são apresentados a seguir:

Teorema 20. Existem no máximo mh folhas em uma árvore de grau m e altura h.

Corolário 4. Se uma árvore de grau m e altura h tem l folhas, h ≥ dlogm le. Se a árvore de grau m é completa e balanceada, então
h = dlogm le.

Revisando 3. A notação dxe é usada para indicar o menor inteiro maior que x. Por exemplo, d1.2e = 2, d1.9e = 2 e d3e = 3.

103
Exercı́cio 46. Ou desenhe uma árvore m-ária completa com 84 folhas e altura 3, onde m é um inteiro positivo, ou
mostre que não existe tal árvore.

14.2 Respostas dos Exercı́cios


Resposta do Exercı́cio 43. 751

Resposta do Exercı́cio 44. 600

Resposta do Exercı́cio 45. 999

Resposta do Exercı́cio 46. Não é possı́vel existir tal árvore.

104
14.3 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 14. Links das Vı́deo Aulas Referentes ao Capı́tulo 14


Propriedades das Árvores
Exemplo Envolvendo Propriedades das Árvores (Grafo)
Árvores Balanceadas
Exemplo Envolvendo Árvores Balanceadas

105
Plano de Aula
Aula 15
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Pesquisa Binária.
Duração: 100 min
Objetivos:
- Apresentar o mecanismo de busca binária;
- Utilizar a busca binária para localizar e/ou inserir um vértice em uma árvore;
- Aplicar o conceito de busca binária em uma árvore de decisão.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

106
Capı́tulo 15

Pesquisa Binária e Árvores de Decisão

15.1 Árvore de Busca Binária


Neste capı́tulo apresentaremos o algoritmo da busca binária que tem por finalidade localizar itens em uma lista
ordenada. Procurar por itens em uma lista é uma das tarefas mais importantes que surgem na ciência da computação.
Árvores binárias podem nos ajudar nessa tarefa. Nelas cada filho de um vértice é designado como filho direito ou
esquerdo, nenhum vértice tem mais de um filho direito ou mais de um filho esquerdo e cada vértice é rotulado com
uma chave, que é um dos itens. Via de regra, os vértices são atribuı́dos chaves para que a chave de um vértice seja
maior que as chaves de todos os vértices em sua subárvore esquerda e menores que as de todos os vértices em sua
subárvore direita.
Tal organização de elementos nos possibilita encontrar de maneira eficiente itens em uma lista com tal ordenação.
Ela funciona dividindo repetidamente pela metade a porção da lista que deve conter o item, até reduzir as localizações
possı́veis a apenas uma. Nós usamos a busca binária em um jogo de adivinhação no tutorial introdutório.
Utilizaremos o seguinte procedimento recursivo para formar a árvore de pesquisa binária para uma lista de itens.
Inicialmente nossa árvore de pesquisa binária contém somente um vértice, ou seja, sua raiz. O primeiro item da lista
é atribuı́do como a chave da raiz. Para adicionar um novo item, primeiro compare-o com as chaves dos vértices já na
árvore, começando na raiz e movendo para a esquerda se o item for menor que a chave do respectivo vértice se este
vértice tiver um filho à esquerda, ou movendo à direita se o item for maior que a chave do respectivo vértice se este
vértice tiver um filho direito. Quando o item é menor que o respectivo vértice e este vértice não tem filho à esquerda,
então um novo vértice com este item como sua chave é inserido como um novo filho à esquerda. Da mesma forma,
quando o item é maior que o respectivo vértice e esse vértice não tem filho direito, um novo vértice com este item
como sua chave é inserido como um novo filho direito. Nós ilustramos este procedimento com o Exemplo 77.

Exemplo 77. Construa uma árvore de busca binária para as palavras maçã, pêra, melão, goiaba, uva, ameixa e
tangerina nesta ordem. Adote a ordem lexicográfica.
Solução: A Figura 15.1 exibe as etapas usadas para construir essa árvore de pesquisa binária. A palavra maçã é a
raiz da árvore. Como pêra vem depois de maçã considerando a ordem alfabética esta ocupa o lugar de filho direito
da maçã que está vazio. A palavra melão vem depois de maçã e portanto deveria ocupar o lugar do filho direito dela.
Mas este já está ocupado pela pêra. Comparando melão com pêra temos que melão deve ocupar o local destinado ao
filho esquerdo da pêra pois vem antes desta em ordem alfabética e o espaço destinado a este filho está vazio. A palavra
goiaba vem antes de maçã e portanto deve ocupar o local do filho esquerdo desta que está vazio. A palavra uva vem
depois da palavra maçã e portanto segue para a posição de filho direito que está ocupada pela pêra. Como a palavra
uva vem depois de pêra temos que esta deverá ocupar o local de filho direito desta última. A palavra tangerina vem

107
depois da palavra maçã e portanto segue para a comparação com a palavra pêra e analogamente para a comparação
com a palavra uva. Como tangerina vem antes de uva esta deve ocupar o local destinado ao filho esquerdo desta
última. Por fim, a palavra ameixa vem antes de maçã e portanto segue para a posição de filho esquerdo desta que é
ocupado pela goiaba. A palavra ameixa vem antes de goiaba e portanto deve ocupar a posição de filho esquerdo desta
que está vazia. Coma frutas!.

Figura 15.1: Construindo a árvore de busca binária.

A seguir apresentaremos uma algoritmo capaz de encontrar um valor em uma árvore de busca binária ou inserir
um novo vértice.

Algoritmo 3. Busca Binária


. procedure inserção(T : árvore de busca binária, x: item)
. v := raiz de T (um vértice não presente em T tem valor nulo)
. while v 6= 0 e label(v) 6= x
. begin
. if x ≤ label(v) then
. if o filho da esquerda de v 6= nulo, then v := filho da esquerda de v
. else adicione um novo vértice como um filho à esquerda de v e defina v := nulo
. else
. if se filho direito de v 6= nulo, then v := filho direito de v
. else adicione um novo vértice como filho direito de v e defina v := nulo
. end
. if raiz de T = null then adicione um vértice v à árvore e rotule-o com x
. else v for nulo ou label(v) 6= x then rotule novo vértice com x e seja v este novo vértice
. Return v {v = localização de x }

Exemplo 78. Considere a árvore de busca binária produzida no Exemplo 77.


a) Use o Algoritmo 3 para localizar ou inserir a palavra graviola na árvore.
b) Qual o número máximo de comparações é necessário para se localizar ou inserir um novo item na árvore obtida no
item “a”? E em uma árvore qualquer?
Solução: a) O algoritmo começa com v, o vértice sob exame, igual à raiz de T , assim, label(v) = maça. Como v 6= nulo
e label(v) = maçã > graviola, em seguida, examinamos o filho esquerdo da raiz. Este filho esquerdo existe, então nós
definimos v, o vértice sob exame, para ser esta o filho esquerdo. Neste passo temos v 6= nulo e label(v) = goiaba <
graviola, portanto examinamos o filho direito de v. Entretanto, esse filho direito não existe, então adicionamos um
novo vértice como filho direito de v (que neste ponto é o vértice com a goiaba como chave) e definimos v := nulo.
Agora, saı́mos do loop while pois v = nulo. Como a raiz de T não é nula e v = nulo, usamos a instrução else if no
final do algoritmo para rotular nosso novo vértice com a chave graviola. Acompanhe a Figura 15.2:

108
Figura 15.2: Inserção da palavra graviola na árvore de busca binária do Exemplo 77.

b) A inserção ou localização de um novo item pode exigir até 4 comparações. Para ver isso, note que uma palavra
que seja maior que maçã, pêra, uva e também tangerina irá exigir 4 comparações. De modo geral, o número de
comparações será, no máximo, igual a h + 1 em que h é a altura de uma árvore.

15.2 Árvores de Decisão


Árvores enraizadas podem ser usadas para modelar problemas nos quais uma série de decisões leva a uma solução.
Por exemplo, uma árvore pode ser usada para localizar itens com base em uma série de comparações, onde cada
comparação nos diz se localizamos o item, ou se devemos ir para a direita ou para a esquerda em uma subárvore. Uma
árvore enraizada na qual cada vértice interno corresponde a uma decisão, com uma subárvore nesses vértices para
cada resultado possı́vel da decisão, é chamada de árvore de decisão. As possı́veis soluções do problema correspondem
aos caminhos para as folhas desta árvore enraizada. O Exemplo 79 ilustra uma aplicação de árvores de decisão.

Exemplo 79. Suponha que existam sete moedas, todas com o mesmo peso, e uma moeda falsa que pesa menos que
as outras. No mı́nimo, quantas pesagens são necessárias usando uma balança para determinar qual das oito moedas
é a falsificada? Considere que estamos usando uma balança de pratos.
Solução: Existem três possibilidades para cada pesagem em uma balança. Os dois pratos podem ter peso igual, o
primeiro prato pode ser mais pesado ou o segundo prato pode ser mais pesado. Consequentemente, a árvore de decisão
para a sequência de pesagens é uma árvore ternária. Há pelo menos oito folhas na árvore de decisão porque há oito
resultados possı́veis (porque cada uma das oito moedas pode ser a moeda mais leve falsificada), e cada resultado
possı́vel deve ser representado por pelo menos uma folha. O maior número de pesagens necessárias para determinar a
moeda falsa é a altura da árvore de decisão. É possı́vel determinar a moeda falsa usando duas pesagens. A árvore de
decisão que ilustra como isso é feito é mostrada na Figura 15.3.

109
Figura 15.3: Uma árvore de decisão para localizar a moeda falsa associada ao Exemplo 79.

Note que o Corolário 4 nos possibilita saber quantas pesagens seriam necessárias para se chegar à moeda falsa no
Exemplo 79 (neste caso, a quantidade de pesagens será igual a altura h da árvore de decisão). Tratando-se de uma
árvore binária completa, temos que h = dlog3 8e = 2. Assim, pelo menos duas pesagens seriam necessárias.

Exemplo 80. Apresentamos na Figura 15.4 uma árvore de decisão que ordena os elementos da lista a, b, c em ordem
decrescente.

Figura 15.4: Uma Árvore de Decisão para Classificar Três Elementos Distintos.

Teorema 21. Um algoritmo de ordenação baseado em comparações binárias requer pelo menos dlog2 (n!)e com-
parações.

Exemplo 81. Considerando o Exemplo 80 temos que foram usadas dlog2 (3!)e = 3 comparações. Se tivéssemos que
colocar 10 números em ordem crescente precisarı́amos de pelo menos dlog2 (10!)e = 22 comparações.

15.3 Exercı́cios
Exercı́cio 47. Construa uma árvore de busca binária para as palavras Salvador, Brası́lia, Goiânia, Curitiba, Sobra-
dinho, Formosa e Manaus nesta ordem. Adote a ordem lexicográfica.

110
Exercı́cio 48. Quantas comparações são necessárias para localizar ou adicionar cada um desses itens na árvore de
busca do Exercı́cio 47. Os itens “a”, “b”, “c” e “d” são independentes?
a) Brası́lia b) Salvador c) Anagé d) Formosa

Exercı́cio 49. Usando ordem alfabética, construa uma árvore de busca binária para as palavras da frase “O IFBA é
uma grande instituição de ensino”.

Exercı́cio 50. Quantas pesagens de uma balança são necessárias para encontrar uma moeda falsa entre quatro moedas
se a moeda falsa puder ser mais pesada ou mais leve que as outras?

Exercı́cio 51. Quantas pesagens de uma balança são necessárias para encontrar uma moeda falsa entre 12 moedas
se a moeda falsa for mais leve que as outras? Descreva um algoritmo para encontrar a moeda mais leve usando este
número de pesagens.

15.4 Respostas dos Exercı́cios


Resposta do Exercı́cio 47. .

Resposta do Exercı́cio 48. a) 2, b) 1, c) 2, d) 5

Resposta do Exercı́cio 49. .

Resposta do Exercı́cio 50. 2

Resposta do Exercı́cio 51. 3

111
15.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 15. Links das Vı́deo Aulas Referentes ao Capı́tulo 15


Árvore de Busca Binária
Exemplo Envolvendo Inserção ou Localização de Um Elementos em Uma Árvore se Busca Binária
Árvores de Decisão
Exemplo Envolvendo Árvores de Decisão

112
Plano de Aula
Aula 16
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Travessia de Uma Árvore.
Duração: 100 min
Objetivos:
- Apresentar o sistema de endereçamento universal;
- Apresentar a travessia em pré-ordem;
- Apresentar a travessia em ordem simétrica;
- Apresentar a travessia em pós-ordem.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

113
Capı́tulo 16

Travessia de Uma Árvores

16.1 Sistema de Endereçamento Universal


Árvores enraizadas ordenadas são frequentemente usadas para armazenar informações. Precisamos de procedi-
mentos para visitar cada vértice de uma árvore enraizada ordenada para acessar esses dados.
Procedimentos para atravessar todos os vértices de uma árvore ordenada com raı́zes dependem das ordenações dos
filhos. Em árvores enraizadas ordenadas, os filhos de um vértice interno são mostrados da esquerda para a direita
nos desenhos que representam esses grafos direcionados. Descreveremos uma maneira pela qual podemos ordenar
totalmente os vértices de uma árvore enraizada ordenada. Para produzir esta ordenação, devemos primeiro rotular
todos os vértices. Fazemos isso recursivamente:
1. Rotule a raiz com o inteiro 0. Em seguida, rotule seus k filhos (no nı́vel 1) da esquerda para a direita com
1, 2, 3, . . . , k.
2. Para cada vértice v no nı́vel n com o rótulo A, rotule seus filhos kv , como eles são extraı́dos da esquerda para a
direita, com A.1, A.2, . . . , A.kv .
Seguindo este procedimento, um vértice v no nı́vel n, para n ≥ 1, é rotulado x1 .x2 . . . . .xn , onde o caminho único da
raiz para v passa pelo vértice x1 st no nı́vel 1, o vértice x2 no nı́vel 2 e assim por diante. Essa rotulagem é chamada
de sistema de endereço universal da árvore ordenada.
Podemos ordenar totalmente os vértices usando o ordenamento lexicografo de seus rótulos no sistema de endereço
universal. O vértice rotulado x1 .x2 . . . . .xn é menor que o vértice identificado como y1 .y2 . . . . .ym se houver um,
0 ≤ i ≤ n, com x1 = y1 , x2 = y2 , ...xi−1 = yi−1 e xi < yi ; ou se n < m e xi = yi para i = 1, 2, . . . n.

Exemplo 82. Escreva o ordenamento lexicográfico dos rótulos da árvore mostrada na Figura 16.1.

Figura 16.1: Sistema de endereço universal de uma árvore enraizada ordenada.

114
Solução: O ordenamento lexicográfico dos rótulos é dado por:

0 < 1 < 1.1 < 1.2 < 1.2.1 < 1.2.2 < 2 < 2.1 < 2.2 < 3 < 3.1

A ordenação acima lhe parece familiar?

16.2 Algoritmos de Travessia


Os procedimentos para visitar sistematicamente todos os vértices de uma árvore com raiz ordenada são chamados
de algoritmos de travessia. Descreveremos três dos algoritmos mais comumente usados, a travessia em pré-ordem, a
travessia ordem simétrica e a travessia pós-ordem. Cada um desses algoritmos pode ser definido recursivamente.
Primeiro definimos a travessia da pré-ordem.

Definição 28. Seja T uma árvore enraizada ordenada com raiz r. Se T consiste apenas de r, então r é o percurso de
pré-ordem de T . Caso contrário, suponha que T1 , T2 , . . . , Tn são as subárvores em r da esquerda para a direita em T .
A travessia da pré-ordem começa visitando r. Ele continua percorrendo T1 na pré-ordem, depois T2 na pré-ordem, e
assim por diante, até que Tn seja atravessado na pré-ordem.

Exemplo 83. Determine a sequência de vértices a serem percorridos em uma travessia em pré-ordem da árvore
enraizada T dada na Figura 16.2?

Figura 16.2: Árvore enraizada ordenada com raiz a.

Solução: Primeiro pesquisamos a raiz a. Note que a tem três subárvores de raı́zes b, c e d. Consideremos a subárvore
mais a esquerda, isto é a subárvore de raiz b. Pesquisemos a raiz b e sua subárvore esquerda de raiz e (e em seguida
seus filhos se existissem). Prosseguindo, pesquisamos a subárvore de raiz f começando por esta raiz. Note que a
subárvore de raiz f tem filhos j e k. Pesquisamos o filho j e seus filhos l e m. Tendo pesquisado toda a subárvore
de raiz j partimos para o vértice k donde finalizamos a travessia da subárvore de raiz b. Como c é o irmão direito
mais próximo de b partiremos para a subárvore de raiz c pesquisando este vértice inicialmente e seus filhos g e h.
Tendo atravessado toda a subárvore de raiz c resta-nos apenas a subárvore de raiz d. Por fim, pesquisamos o vértice
d e, em seguida, ao chegar no vértice i, completamos a travessia da árvore T em pré-ordem. Assim, temos a seguinte
ordenação dos vértices em uma travessia em pré-ordem: a, b, e, f, j, l, m, k, c, g, h, d, i.

115
Palavra do Mestre 9. Há um truque simples para conferirmos se a ordem dos vértices de uma árvore em
uma travessia em pré-ordem está correta. Para tando, comece fazendo um pequeno sinal(sı́mbolo, marca etc)
à esquerda de cada vértice na árvore em questão. Depois, partindo da esquerda da raiz ligue todos estes sinais
em uma linha contı́nua “circulando”a árvore nas proximidades do seu vértice. A ordem com que os sinais foram
sendo pintados corresponde à pesquisa em pré-ordem. Esta regra não lhe isenta de saber o processo de travessia
uma vez que se quer entender o mecanismo de travessia para uma posterior implementação Só menino de segunda
série se contenta com truques somente! Acompanhe o truque na Figura 16.3:

Figura 16.3: Truque para verificação de uma travessia em pré-ordem.

O Programa 12, em linguagem Python 3, apresenta a travessia em pré-ordem de uma árvore enraizada.

Definição 29. Seja T uma árvore enraizada ordenada com raiz r. Se T consiste apenas de r, então r é a travessia
ordem simétrica de T . Caso contrário, suponha que T1 , T2 , . . . , Tn são as subárvores da esquerda para a direita. A
travessia ordem simétrica começa atravessando T1 e em seguida visitando r. Ele continua percorrendo T2 em ordem
simétrica, depois T3 em ordem simétrica, . . . e finalmente Tn em ordem simétrica.

Exemplo 84. Determine a sequência de vértices a serem percorridos em uma travessia em ordem simétrica da árvore
enraizada T dada na Figura 16.2?
Solução: Para facilitar retomemos a Figura 16.2:

Note que a raiz a de T tem subárvores T1 de raiz b, T2 de raiz c e T3 de raiz d. Antes de pesquisamos a raiz a devemos

116
pesquisar a subárvore T1 . Mas a subárvore T1 tem ela duas subárvores T1b de raiz e e T2b de raiz f . Neste caso,
pesquisamos primeiramente o vértice e (pois não possui mais subárvores) e em seguida sua raiz b. Partimos então
para a subárvore da direita T2b . Mas esta tem outras duas subárvores T1f de raiz j e T2f de raiz k. Assim, pesquisamos
em T1f o vértice l(pois não possui mais subárvores), em seguida a raiz j de T1f e por último o vértice m. Tendo feito a
travessia de T1f partimos para a raiz f e em seguida para o vértice k da árvore T2b . Como atravessamos toda subárvore
T1 de raiz b pesquisamos a raiz a e em seguida partimos para a subárvore T2 . Mas T2 tem duas subárvores T1c de raiz
g e T2c de raiz h. Neste caso, pesquisamos o vértice g (sem filhos), a raiz c e por último o vértice h. Tendo atravessado
toda subárvore T2 partimos para a subárvore T3 . Neste caso, pesquisamos o vértice i e depois a raiz d completando
a travessia da árvore T em ordem simétrica. Assim, temos a seguinte ordenação dos vértices em uma travessia em
ordem simétrica: e, b, l, j, m, f, k, a, g, c, h, i, d.

Palavra do Mestre 10. Mais uma boa notı́cia. Há, também, um truque simples para conferirmos se a ordem
dos vértices de uma árvore em uma travessia em ordem simétrica está correta. Para tando, comece fazendo
um pequeno sinal(sı́mbolo, marca etc) abaixo de cada vértice (entre a primeira aresta e as demais caso existam
abaixo do vértice) na árvore em questão. Depois, partindo da esquerda da raiz ligue todos estes sinais em uma
linha contı́nua “circulando”a árvore nas proximidades do seu vértice. A ordem com que os sinais foram sendo
pintados corresponde à pesquisa em ordem simétrica. Acompanhe o truque na Figura 16.4:

Figura 16.4: Truque para verificação de uma travessia em ordem simétrica.

O Programa 13, em linguagem Python 3, apresenta a travessia em ordem simétrica de uma árvore enraizada.

Definição 30. Seja T uma árvore enraizada ordenada com raiz r. Se T consiste apenas em r, então r é a travessia de
pós-ordem de T . Caso contrário, suponha que T1 , T2 , . . . , Tn são as subárvores da esquerda para a direita. A travessia
de pós-ordem começa atravessando T1 no pós-ordem, depois T2 no pós-ordem, . . . , em seguida, Tn no pós-ordem e
termina visitando r.
Exemplo 85. Determine a sequência de vértices a serem percorridos em uma travessia em pós-ordem da árvore
enraizada T dada na Figura 16.2?
Solução: Para facilitar retomemos a Figura 16.2:

117
Note que a raiz a tem três subárvores T1 de raiz b, T2 de raiz c e T3 de raiz d. A subárvore T1 tem subárvores T1b
de raiz e e T2b de raiz f . Neste caso pesquisamos o vértice e e partimos para T2b . Note que T2b tem duas subárvores
T1f de raiz j e T2f de raiz k. Assim, partimos para a subárvore T1f que possui duas subárvores T1j de raiz l e T2j de
raiz m. Pesquisamos então o vértice l (nosso segundo vértice é pesquisado somente agora!), em seguida o vértice m e
só então a raiz j de T1f . Agora pesquisamos o vértice k correspondente à subárvore T2f para então pesquisar o vértice
f finalizando a travessia da subárvore T2b . Tendo finalizado a subárvore T2b pesquisamos o vértice b finalizando T1 .
Agora, passamos para a subárvore T2 a qual tem duas subárvores T1c de raiz g e T2c de raiz h. Neste caso, pesquisamos
o vértice g, em seguida o vértice h e por último o vértice c finalizando a travessia de T2 . Agora podemos partir para
a subárvore T3 . Note que esta tem somente uma subárvore T1d de raiz i. Sendo assim, pesquisamos o vértice i e
por último o vértice d finalizando T3 . Como fizemos a travessia de T1 , T2 e T3 em pós-ordem podemos percorrer,
finalmente, a raiz a completando a travessia em pós-ordem da árvore T . Assim, temos a seguinte ordenação dos
vértices em uma travessia em pós-ordem: e, l, m, j, k, f, b, g, h, c, i, d, a.

Palavra do Mestre 11. Analogamente aos processos de travessia em pré-ordem e também em ordem simétrica
há, também, um truque simples para conferirmos se a ordem dos vértices de uma árvore em uma travessia
em pós-ordem está correta. Para tando, comece fazendo um pequeno sinal(sı́mbolo, marca etc) à direita de
cada vértice na árvore em questão. Depois, partindo da esquerda da raiz ligue todos estes sinais em uma linha
contı́nua “circulando”a árvore nas proximidades do seu vértice. A ordem com que os sinais foram sendo pintados
corresponde à pesquisa em pós-ordem. Acompanhe o truque na Figura 16.5:

Figura 16.5: Truque para verificação de uma travessia em pós-ordem.

O Programa 14, em linguagem Python 3, apresenta a travessia em pós-ordem de uma árvore enraizada.

118
16.3 Exercı́cios
Exercı́cio 52. Considere as árvores G e H dadas a seguir:

Determine:
a) O percurso em pré-ordem de G.
b) o percurso em ordem simétrica de G
c) o percurso em pós-ordem de G.
d) O percurso em pré-ordem de H.
e) o percurso em ordem simétrica de H
f) o percurso em pós-ordem de H.

16.4 Respostas dos Exercı́cios


Resposta do Exercı́cio 52. .
a) a, b, f, k, o, p, q, l, c, d, g, h, m, n, i, e, j, b) o, k, p, q, f, l, b, c, a, g, d, m, h, n, i, j, e,
c) o, p, q, k, l, f, b, c, g, m, n, h, i, d, j, e, a, d) a, b, d, g, k, h, l, r, e, i, m, c, f, j, n, o, s, p, t, q
e) k, g, d, r, l, h, b, m, i, e, a, n, j, s, o, t, p, q, f, c, f) k, g, r, l, h, d, m, i, e, b, n, s, o, t, p, q, j, f, c, a

119
16.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 16. Links das Vı́deo Aulas Referentes ao Capı́tulo 16


Sistema de Endereçamento Universal
Travessia em Pré-Ordem
Travessia em Ordem Simétrica
Travessia em Pós-Ordem

120
Plano de Aula
Aula 17
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Aplicação dos Processos de Travessia no Cálculo de Expressões Algébricas.
Duração: 100 min
Objetivo:
- Apresentar as notações prefixas, infixas e pós-fixas para representação de expressões matemáticas.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

121
Capı́tulo 17

Aplicação dos Processos de Travessia no


Cálculo de Expressões Algébricas

17.1 Notação Prefixa, Infixa e Pós-fixa


Árvores enraizadas ordenadas também podem ser usadas para representar vários tipos de expressões, como
expressões aritméticas envolvendo números, variáveis e operações. As diferentes listagens dos vértices de árvores com
raı́zes ordenadas usadas para representar expressões são úteis na avaliação dessas expressões.
Por exemplo, considere a representação de uma expressão aritmética envolvendo os operadores − (adição), − (sub-

tração), ∗ (multiplicação), / (divisão) e (exponenciação). Usaremos parênteses para indicar a ordem das operações.
Uma árvore ordenada pode ser usada para representar tais expressões, onde os vértices internos representam operações,
e as folhas representam as variáveis ou números. Cada operação opera em suas subárvores esquerda e direita (nessa
ordem).

Exemplo 86. Determine a árvore enraizada ordenada que representa a expressão:

((x + y)∧ 2) + ((x − 4)/3)

Solução: A árvore binária dessa expressão pode ser construı́da de baixo para cima. Primeiro, uma subárvore para
a expressão x + y é construı́da. Então isto é incorporado como parte da subárvore maior representando (x + y)∧ 2.
Além disso, uma subárvore para x − 4 é construı́da e, em seguida, isso é incorporado em uma subárvore que representa
(x − 4)/3. Finalmente, as subárvores representando (x + y)∧ 2 e (x − 4)/3 são combinadas para formar a árvore
enraizada ordenada representando ((x + y)∧ 2) + ((x − 4)/3). Essas etapas são mostradas na Figura 17.1.

Figura 17.1: Passos para a representação por meio de uma árvore binária da expressão ((x + y)∧ 2) + ((x − 4)/3).

122
Exemplo 87. Qual é a sequencia da travessia em pré-ordem para ((x + y)∧ 2) + ((x − 4)/3)?
Solução: Obtemos a pré-ordem para essa expressão percorrendo a árvore binária que a representa na pré-ordem,
mostrada na Figura 17.1. Temos +, ∧ , +, x, y, 2, /, −, x, 4 e 3.

Exemplo 88. Determine o valor da expressão prefixada:

+, −, ∗, 2, 3, 5, /, ∧ , 2, 3 4

Solução: As etapas usadas para avaliar essa expressão trabalhando da direita para a esquerda e executando operações
usando um operador localizado à esquerda de dois valores numéricos seguidos. Os passos são mostradas na Figura
17.2:

Figura 17.2: Avaliando uma expressão em prefixo.

Exemplo 89. Qual é a forma pós-ordem da expressão ((x + y)∧ 2) + ((x − 4)/3)?
Solução: Conforme visto no Exemplo 86 temos a seguinte árvore binária representando a expressão dada:

Obtemos a pós-ordem para essa expressão percorrendo a árvore binária que a representa na pré-ordem, mostrada na
Figura 17.1. Temos o seguinte percurso: x, y, +, 2, ∧ , x, 4, −, 3, /, +.

123
Exemplo 90. Qual é o valor da expressão do postfix 7, 2, 3, ∗, −, 4, ∧ , 9, 3, /, +?
Solução: As etapas usadas para avaliar essa expressão trabalhando da esquerda para a direita e executando operações
usando um operador localizado à direita de dois valores numéricos seguidos. Os passos são mostradas na Figura 17.3:

Figura 17.3: Avaliando uma expressão pós-fixa.

Exemplo 91. Qual é a sequencia da travessia em ordem simétrica da árvore binária dada no Exemplo 86?
Solução: Conforme visto no Exemplo 86 temos a seguinte árvore binária representando a expressão dada:

O percurso em ordem simétrica é dado por: x, +, y, ∧ , 2, +, x, −, 4, /, 3.

Note que a sequência de sı́mbolos obtida no Exemplo 91 coincide com a ordem na qual estes aparecem na ex-
pressão associada ((x + y)∧ 2) + ((x − 4)/3). Contudo, a notação infixada necessita de parênteses e portanto, so-
mente a sequência apresentada no Exemplo 91 é ambı́gua. Para resolvermos o problema da ambiguidade pode-
mos utilizar as notações prefixada obtida pela travessia em pré-ordem e notação pós-fixada obtida pela travessia em
pós ordem. As notações prefixada e pós-fixada são também conhecidas, respectivamente, por notação polonesa e
notação polonesa inversa.

17.2 Exercı́cios
Exercı́cio 53. Considere as expressões i) x ∗ y + x/z e ii) x + ((x ∗ y + x)/y):
a) Represente as expressões i) e ii) usando árvores binárias.

124
b) Escrevas as expressões i) e ii) codificação infixada.
c) Escrevas as expressões i) e ii) codificação prefixada.
d) Escrevas as expressões i) e ii) codificação pós-fixada.

Exercı́cio 54. Qual é o valor de cada uma dessas expressões em ordem prefixada?
a) −, ∗, 2, /, 8, 4, 3
b) ∧ , −, ∗, 3, 3, ∗, 4, 2, 5
c) +, −, ∧ , 3, 2, ∧ , 2, 3, /, 6, −, 4, 2

Exercı́cio 55. Qual é o valor de cada uma dessas expressões em ordem pós-fixada?
a) 6, 2, ∗, 3, /, 1, +
b) 4, 2, +, 3, 5, 2, −, +, ∗
c) 3, 2, ∧ , 5, 1, +, −, 2, 2, ∧ , ∧

17.3 Respostas dos Exercı́cios


Resposta do Exercı́cio 53. .

b) i) x, ∗, y, +, x, /, z ii) x, +, x, ∗, y, +, x,/, y
c) i) +, ∗, x, y, /, x, z ii) +, x, /, +, ∗, x, y,x, y
d) i) x, y, ∗, x, z, /, + ii) x, x, y, ∗, x, +, y,/, +

Resposta do Exercı́cio 54. a) 1, b) 1, c) 4

Resposta do Exercı́cio 55. a) 5, b) 36, c) 81

125
17.4 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 17. Links das Vı́deo Aulas Referentes ao Capı́tulo 17


Representação de Expressões Algébricas Por Meio de Árvores
Notação Prefixa
Notação Posfixa
Notação Infixa (Cuidado!)

126
Plano de Aula
Aula 18
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Árvores Geradoras.
Duração: 100 min
Objetivos:
- Apresentar o conceito de árvore geradora;
- Apresentar o algoritmo da busca em profundidade na obtenção de uma árvore geradora;
- Apresentar o algoritmo da busca em largura na obtenção de uma árvore geradora.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

127
Capı́tulo 18

Árvores Geradoras

18.1 Problematizando
Considere o sistema de estradas de terra que liga cidades de certa região representado pelo grafo simples mostrado
na Figura 18.1 (a). A fim de melhorar o transporte nesta região necessita-se asfaltar um número suficiente de estadas,
de preferência mı́nimo (devido ao custo), de modo que sempre exista um trajeto totalmente asfaltado ligando duas
cidades quaisquer desta região. Observe que pelo menos 5 estradas devem ser asfaltadas para atender à condição
imposta. A Figura 18.1 (b) mostra um desses conjuntos de estradas. Observe que o subgrafo representando essas
estradas é uma árvore, pois está conectado e contém seis vértices e cinco arestas.

Figura 18.1: (a) Um sistema rodoviário e (b) um conjunto de estradas a serem desobstruı́das.

Definição 31. Seja G um grafo simples. Uma árvore geradora de G é um subgrafo de G que é uma árvore contendo
todos os vértices de G.

Exemplo 92. Encontre uma árvore geradora do grafo simples G mostrado na Figura 18.2.

Figura 18.2: Um grafo simples G.

Solução: O grafo G está conectado, mas não é uma árvore, pois contém circuitos simples. Remova as arestas {d, c} e

128
{d, e}. Isso elimina um circuito simples, e o subgrafo resultante ainda está conectado e ainda contém todos os vértices
de G. Em seguida, remova a aresta {e, f } para eliminar um segundo circuito simples. Por fim, remova a aresta {g, h}
para produzir um grafo simples sem circuitos simples. Este subgrafo é uma árvore geradora, pois é uma árvore que
contém todos os vértices de G. A sequência de remoções de arestas usada para produzir a árvore de abrangência é
ilustrada na Figura 18.3.

Figura 18.3: Produzindo uma árvore geradora para G removendo arestas que formam circuitos simples.

A árvore mostrada na Figura 18.3 não é a única árvore geradora de G. Por exemplo, uma outra árvore geradora do
grafo G é dada na Figura 18.4.

Figura 18.4: Árvores geradoras do grafo G dado na Figura 18.2

Teorema 22. Um grafo simples é conectado se, e somente se, tiver uma árvore geradora.

Demonstração. Primeiro, suponha que um grafo simples tenha uma árvore geradora T . T contém todos os vértices de
G. Além disso, existe um caminho em T entre quaisquer dois dos seus vértices. Como T é um subgrafo de G, existe
um caminho em G entre quaisquer dois de seus vértices. Portanto, G está conectado.
Agora suponha que G esteja conectado. Se não for uma árvore, ela deve conter um circuito simples. Remova uma
aresta de um desses circuitos simples. O subgrafo resultante tem uma aresta a menos, mas ainda contém todos os
vértices de G e está conectado. Esse subgrafo ainda está conectado pois, quando dois vértices estão conectados por um
caminho contendo a aresta removida e esse caminho faz parte de um circuito simples que retorna para algum desses
vértices, então eles são conectados por um caminho que não contém essa aresta. Podemos construir esse caminho
inserindo-o no caminho original, no ponto em que a aresta removida era uma vez, o circuito simples com essa aresta
removida. Se este subgrafo não é uma árvore, tem um circuito simples; assim como antes, remova uma aresta que
esteja em um circuito simples. Repita este processo até que nenhum circuito simples permaneça. Isso é possı́vel pois
há apenas um número finito de arestas no grafo. O processo termina quando não há circuitos simples. Uma árvore é
produzida pois o grafo permanece conectado conforme as arestas são removidas. Esta árvore é uma árvore geradora
pois contém todos os vértices de G.

129
18.2 Busca em Profundidade
A demonstração do Teorema 22 fornece um algoritmo para encontrar árvores geradoras, removendo arestas de
circuitos simples. Esse algoritmo é ineficiente, pois requer que circuitos simples sejam identificados. Em vez de
construir árvores geradoras removendo arestas, podemos construı́-las adicionando arestas sucessivamente por meio
da busca em profundidade. Nós formaremos uma árvore enraizada, e a árvore geradora será o grafo não orientado
subjacente a esta árvore enraizada.
Arbitrariamente, escolha um vértice do grafo como a raiz. Forme um caminho começando neste vértice, adicionando
sucessivamente vértices e arestas, onde cada nova aresta incide com o último vértice no caminho e um vértice que
ainda não esteja no caminho. Continue adicionando vértices e arestas a esse caminho o maior tempo possı́vel. Se o
caminho percorrer todos os vértices do grafo, a árvore que consiste nesse caminho é uma árvore de abrangência. No
entanto, se o caminho não passar por todos os vértices, mais vértices e arestas deverão ser adicionados. Volte para
o próximo ao último vértice no caminho e, se possı́vel, forme um novo caminho começando neste vértice passando
por vértices que ainda não foram visitados. Se isso não puder ser feito, mova de volta outro vértice no caminho, ou
seja, dois vértices de volta no caminho e tente novamente. Repita este procedimento, começando no último vértice
visitado, movendo-se de volta pelo caminho um vértice de cada vez, formando novos caminhos que sejam o maior
tempo possı́vel até que não seja possı́vel adicionar mais arestas. Como o grafo tem um número finito de arestas e está
conectado, esse processo termina com a produção de uma árvore geradora. Cada vértice que termina um caminho em
um estágio do algoritmo será uma folha na árvore enraizada, e cada vértice onde um caminho é construı́do a partir
deste vértice será um vértice interno.

Exemplo 93. Use a busca em profundidade para encontrar uma árvore geradora para o grafo G mostrado na Figura
18.5.

Figura 18.5: Grafo G.

Solução: Os passos usados pela primeira busca em profundidade para produzir uma árvore geradora de G são mostrados
na Figura 18.6. Nós começamos arbitrariamente com o vértice a (mas pode ser outro). Um caminho é construı́do
adicionando sucessivamente as arestas (seguindo alguma ordem, digamos a lexicográfica) incidentes com os vértices
que ainda não estão no caminho, desde que isso seja possı́vel. Isso produz um caminho a, c, b (note que outros caminhos
poderiam ter sido construı́dos caso usássemos um critério diferente da ordem lexicográfica). Em seguida, volte para
c. Agora adicionamos o caminho d, e, f . Voltando para o vértice e, adicionamos o caminho g, h, i. Voltando para o
vértice h, adicionamos, por último, o vértice j. Temos assim uma árvore geradora de G obtida por meio da busca em
profundidade.

130
Figura 18.6: Pesquisa em profundidade em G.

As arestas selecionadas pela busca em profundidade de um grafo são chamadas arestas da árvore. Todas as outras
arestas do grafo devem conectar um vértice a um ancestral ou descendente desse vértice na árvore. Essas arestas são
chamadas de arestas de retorno. No Exemplo 93 temos que as arestas de retorno são dadas por {d, f } e {e, h}

Palavra do Mestre 12. No Exemplo 93 poderı́amos ter optado pela escolha dos seguintes caminhos
a, c, d, f, e, g, h, j (caminho longo) voltando em seguida para o vértice h acrescentando a aresta {h, i}, depois
retornando ao vértice c e acrescentando a aresta {b, c}. A princı́pio não parece haver nenhum problema com esta
escolha. Contudo, em uma situação prática, ao darmos nomes aos vértices (no nosso caso, nomes formados por
uma única letra) podemos usar isso em nosso favor, principalmente quando precisarmos indicar à máquina qual
escolha tomar. Note que temos uma capacidade, pelo menos neste caso, de enxergar um caminho mais longo
quase que de imediato, muito diferente de uma máquina com uma programação simplificada, sem recursos visu-
ais! Lembre-se de que você está estudando esta matéria para usá-la em seu curso, futuramente implementando-a
e não somente para passar na prova.

Vejamos o algoritmo para a Busca em Profundidade.

Algoritmo 4. Busca em Profundidade


. procedure DF S (G: grafo conexo com vértices v1 , v2 . . . , vn )
. T := árvore que consiste apenas do vértice v1
. visit(v1 )
. procedure
. for cada vértice w adjacente a v e ainda não em T
. begin
. adicione o vértice w a aresta {v.w} a T
. visit(w)
. end

131
O Programa 15, em linguagem Python 3, apresenta apresenta a ordem de escolha dos vértices considerando a
Busca em Profundidade.

18.3 Busca em Largura


Também podemos produzir uma árvore geradora de um grafo simples pelo uso da busca em largura. No-
vamente, uma árvore enraizada será construı́da e o grafo não direcionado subjacente dessa árvore enraizada forma a
árvore geradora.
Arbitrariamente, escolha uma raiz nos vértices do grafo. Em seguida, adicione todas as arestas incidentes neste
vértice. Os novos vértices adicionados neste estágio se tornam os vértices no nı́vel 1 na árvore geradora. Em seguida,
para cada vértice no nı́vel 1, visitado em ordem, adicione cada aresta incidente a este vértice na árvore, desde que ele
não produza um circuito simples. Ordene arbitrariamente os filhos de cada vértice no nı́vel 1. Isso produz os vértices
no nı́vel 2 da árvore. Siga o mesmo procedimento até que todos os vértices da árvore tenham sido adicionados. O
procedimento termina porque há apenas um número finito de arestas no grafo. Uma árvore geradora é produzida pois
produzimos uma árvore contendo todos os vértices do grafo. Um exemplo de pesquisa em largura é dado no Exemplo
94. Novamente, devemos usar alguma ordenação para a escolha dos objetos.

Exemplo 94. Use a busca em largura para encontrar uma árvore geradora para o grafo mostrado na Figura 18.7.

Figura 18.7: Um grafo G.

Solução: Os passos do primeiro procedimento de busca são mostrados na Figura 94. Nós escolhemos o vértice a
(*vértice do nı́vel 0) como a raiz. Em seguida, adicionamos as arestas incidentes com todos os vértices adjacentes a
a. Assim, adicionamos os vértices (e suas arestas) b e d (vértices do nı́vel 1). A partir de b adicionamos os vértices c
e e (vértices do nı́vel 2). Ainda no nı́vel 1, a partir de d adicionamos o vértice h (vértice do nı́vel 2). A partir de c
adicionamos o vértice f (nı́vel 3). A partir de e adicionamos o vértice i (nı́vel 3). A partir de h adicionamos k (nı́vel
3). A partir de f adicionamos g e j (nı́vel 4). A partir de h adicionamos k. Note que não adicionamos mais vértice
algum a partir de i. Do contrário, terı́amos um circuito simples. A partir de g adicionamos l (nı́vel 5) e, por fim, a
partir de k adicionamos m. Temos assim uma árvore geradora de G obtida por meio da busca em largura.

Vejamos o algoritmo para a Pesquisa em Largura.

132
Figura 18.8: Busca em largura em G.

Algoritmo 5. Busca em Largura


. procedure BF S (G: grafo conexo com vértices v1 , v2 . . . , vn )
. T := árvore que consiste apenas do vértice v1
. L := lista vazia
. ponha v1 na lista L do vértices não processados
. while L não estiver vazia
. begin
. remova o primeiro vértice, v, de L.
. for cada vizinho w de v
. if w não estiver em L e não estiver em T then
. begin
. adicione w ao final da lista L
. adicione w e as arestas {v, w} a T
. end
. end

O Programa 16, em linguagem Python 3, apresenta a ordem de escolha dos vértices considerando a Busca em
Largura.

133
18.4 Exercı́cios
Exercı́cio 56. Quantas arestas devem ser removidas de um grafo conectado com n vértices e m arestas para produzir
uma árvore geradora?

Exercı́cio 57. Quantas árvores geradoras diferentes cada um desses grafos simples possui?
a) K3 b) K4 c) K2,2 d) C5

Exercı́cio 58. Encontre arvores geradoras, a partir da raiz a, aplicando (i) a busca em profundidade e (ii) a busca
em largura. Explicite a ordem em que as arestas foram adicionadas utilizando a ordem lexicográfica.

18.5 Respostas dos Exercı́cios


Resposta do Exercı́cio 56. m − (n − 1)

Resposta do Exercı́cio 57. a) 3; b) 16; c) 4; d) 5

Resposta do Exercı́cio 58. Considerando que {x, y} = {y, x} temos:


a) Busca em profundidade: {a, b}, {b, c}, {c, d}, {d, e}, {e, f }, {f, g};
Busca em largura: {a, b}, {a, d}, {a, g}, {b, c}, {b, e}, {b, f }.
b) Busca em profundidade: {a, b}, {b, c}, {c, e}, {d, e}, {d, j}, {g, j}, {g, h}, {i, j};
Busca em largura {a, b}, {a, d}, {b, c}, {d, e}, {d, j}, {c, f }, {e, g}, {i, j}, {g, h}.
c) Busca em profundidade: {a, b}, {b, d}, {c, d}, {d, f }, {f, e}, {e, g}, {g, h}, {h, m}, {m, o}, {o, n}, {f, j}, {j, i}, {i, k}, {k, l};
Busca em largura: {a, b}, {a, c}, {b, d}, {b, e}, {d, f }, {d, i}, {e, g}, {f, h}, {f, j}, {i, k}, {h, m}, {h, n}, {j, l}, {m, o}

134
18.6 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 18. Links das Vı́deo Aulas Referentes ao Capı́tulo 18


Árvores Geradoras
Condição de Existência de Uma Árvore Geradora
Busca em Profundidade
Busca em Largura

135
Plano de Aula
Aula 19
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Árvores Geradoras Mı́nimas.
Duração: 100 min
Objetivos:
- Apresentar o conceito de árvores geradoras mı́nimas;
- Apresentar o algoritmo de Prim para a obtenção de árvores geradoras mı́nimas;
- Apresentar o algoritmo de Kruskal para a obtenção de árvores geradoras mı́nimas.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.

136
Capı́tulo 19

Árvores Geradoras Mı́nimas

19.1 Problematizando
Uma empresa planeja construir uma rede de comunicações conectando seus seis centros empresariais. Alguns des-
ses centros podem ser vinculado a uma linha telefônica alugada já existente. Quais links devem ser feitos para garantir
que haja um caminho entre dois desses centros para que o custo total da rede seja minimizado? Podemos modelar esse
problema usando o grafo ponderado mostrado na Figura 19.1, onde vértices representam centros empresariais, arestas
representam possı́veis linhas dedicadas e os pesos nas arestas são as taxas de aluguel mensais das linhas representadas
pelas arestas. Podemos resolver esse problema ao encontrar uma árvore geradora de modo que a soma dos pesos das
arestas da árvore seja minimizada. Essa árvore geradora é chamada de árvore geradora mı́nima.

Figura 19.1: Grafo ponderado que mostra os custos mensais de aluguel de linhas em uma rede de computadores.

19.2 Algoritmos Para Árvores Geradoras Mı́nimas


Uma grande variedade de problemas é resolvida encontrando uma árvore geradora em um grafo ponderado, de
modo que a soma dos pesos das arestas na árvore seja mı́nima. Nesta seção apresentaremos dois algoritmos para
obtenção de tais árvores.

Definição 32. Uma árvore geradora mı́nima em um grafo ponderado conectado é uma árvore geradora que possui a
menor soma possı́vel de pesos de suas arestas.

137
Os algoritmos que apresentaremos a seguir para a obtenção de árvores geradoras mı́nimas a partir de um grafo
ponderado são algoritmos ótimos. Um algoritmo ótimo é um procedimento que faz uma escolha ideal em cada uma
de suas etapas. A otimização em cada etapa não garante que a solução geral ideal seja produzida. No entanto, os
dois algoritmos apresentados nesta seção para a construção de árvores geradoras mı́nima são algoritmos ótimos que
produzem soluções ótimas. Que beleza!
O primeiro algoritmo que discutiremos foi originalmente descoberto pelo matemático tcheco Vojtech Jarnı́k em
1930, que o descreveu em um jornal obscuro da República Tcheca. O algoritmo tornou-se bem conhecido quando foi
redescoberto em 1957 por Robert Prim. Por causa disso, é conhecido como algoritmo Prim (e às vezes como algoritmo
Prim-Jarnı́k).
Comece escolhendo qualquer borda com menor peso, colocando-a na árvore de abrangência. Acrescente sucessiva-
mente às arestas da árvore de peso mı́nimo que estão incidentes a um vértice já na árvore, nunca formando um circuito
simples com as arestas já existentes na árvore. Pare quando n − 1 arestas tiverem sido adicionadas.
Vejamos o algoritmo de Prim:

Algoritmo 6. Algoritmo de Prim


. procedure Prim (G: grafo não orientado conexo com n vértices e arestas ponderadas)
. T := uma aresta com peso mı́nimo
. for i := 1 to n − 2
. begin
. e := uma aresta de peso mı́nimo incidente em um vértice em T e que não forme um ciclo simples em T se
adicionada a T
. T := T com e adicionada
. end {T é uma árvore geradora mı́nima de G}

Exemplo 95. Use o algoritmo da Prim para projetar uma rede de comunicações de custo mı́nimo conectando todos
os computadores representados pelo grafo na Figura 19.1.
Solução: O algoritmo de Prim é realizado escolhendo uma borda inicial de peso mı́nimo e adicionando sucessivamente
bordas de peso mı́nimo que são incidentes a um vértice na árvore e que não irá formar circuitos simples. Iniciamos
escolhendo a borda de menor peso do grafo, isto é, Feira de Santana - Salvador [500]. Prosseguimos adicionando a
aresta de menor peso incidente aos vértices já adicionados à árvore (Feira e Salvador) de modo a não termos um
circuito simples, isto é, Salvador - Jequié [680]. Seguindo, temos que a aresta de menor peso incidente aos vértices
adicionados de modo a não termos um circuito simples é Jequié - Conquista [720] (Note que a aresta Feira de Santana
- Jequié não poderia ser adicionada pois terı́amos um circuito simples). Seguindo, temos que a aresta de menor peso
incidente aos vértices presentes na árvore é Vitória da Conquista - Guanambi [700]. Por fim, adicionamos a aresta
Vitória da Conquista - Ilhéus [720]. A soma mı́nima é dada por: R$ 3320. As arestas escolhidas estão destacadas na
Figura 19.2:

138
Figura 19.2: Uma árvore geradora mı́nima para o grafo ponderado na Figura 19.1

Observe que a árvore geradora não necessariamente é única. Em alguns casos temos que optar por arestas de
mesmo peso. Neste caso, recomenda-se usarmos alguma ordem, como por exemplo a ordem alfabética, numérica etc
para escolher dentre os itens aquele que “vem primeiro”.

Exemplo 96. Use o algoritmo Prim para encontrar uma árvore geradora mı́nima no grafo mostrado na Figura 19.3.

Figura 19.3: Grafo ponderado.

Solução: As escolhas, de acordo com o algoritmo de Prim são: {f, g}[1], {f, j}[1],{b, f }[2], {a, b}[2], {e, f }[2], {j, k}[2],
{k, l}[1], {b, c}[3], {c, d}[2], {d, h}[3] e {i, j}[3]. A soma mı́nima é dada por: 21. Uma árvore geradora mı́nima
construı́da usando o algoritmo Prim é mostrada na Figura 19.4.

Figura 19.4: Uma árvore geradora mı́nima produzida usando o algoritmo de Prim.

O Programa 17, em linguagem Pyhton 3, é a implementação do algoritmo de Prim.


O segundo algoritmo que discutiremos foi descoberto por Joseph Kruskal em 1956. Para realizar o algoritmo de
Kruskal, escolha uma borda no grafo com peso mı́nimo. Adicione sucessivamente arestas com peso mı́nimo que não

139
formam um circuito simples com as arestas já escolhidas. Pare após n − 1 arestas forem selecionadas.

Algoritmo 7. Algoritmo de Kruskal


. procedure Kruskal (G: grafo não orientado conexo com n vértices e arestas ponderadas)
. T := grafo vazio
. for i := 1 to n − 1
. begin
. e := uma aresta qualquer de G de peso mı́nimo e que não forme um ciclo simples em T se adicionada a T
. T := T com e adicionada
. end {T é uma árvore geradora mı́nima de G}

Exemplo 97. Use o algoritmo da Kruskal para projetar uma rede de comunicações de custo mı́nimo conectando todos
os computadores representados pelo grafo na Figura 19.1.
Solução: Devemos escolher as arestas de peso mı́nimo de modo a não termos circuitos simples até que tenhamos
adicionado 5 arestas. As arestas são escolhidas na seguinte ordem: Feira de Santana - Salvador [500], Jequié - Salvador
[680], Guanambi - Vitória da Conquista [700], Ilhéus - Vitória da Conquista [720], Jequié - Vitória da Conquista [720].
A soma mı́nima é (obviamente) dada por R$ 3320. Como assim, obviamente? As arestas escolhidas estão destacadas
na Figura 19.5:

Figura 19.5: Uma árvore geradora mı́nima para o grafo ponderado na Figura 19.1

Exemplo 98. Use o algoritmo de Kruskal para encontrar uma árvore geradora mı́nima do grafo ponderado mostrado
na Figura 19.6:

Figura 19.6: Grafo ponderado.

140
Solução: As escolhas, de acordo com o algoritmo de Kruskal são: {c, g}[1], {f, j}[1],{k, l}[1], {b, f }[2], {c, d}[2],
{d, h}[2], {e, f }[2], {i, j}[2], {j, k}[2], {a, b}[3] e {b, c}[3] A árvore geradora mı́nima obtida pelo algoritmo de Kruskal
são mostrados na Figura 19.7.

Figura 19.7: Uma árvore geradora mı́nima produzida pelo algoritmo de Kruskal.

O Programa 18, em linguagem Pyhton 3, é a implementação do algoritmo de Kruskal.

19.3 Exercı́cios
Exercı́cio 59. Aplique os algoritmos de Prim e Kruskal aos grafos dados a seguir:

19.4 Respostas dos Exercı́cios


Resposta do Exercı́cio 59. a) Prim: {b, c}[1], {a, b}[2], {c, d}[2], {a, g}[3], {e, g}[1], {g, i}[3], {e, h}[3], {h, l}[2],
{g, j}[3], {j, k}[1], {a, f }[4], Soma mı́nima: 24; Kruskal {b, c}[1], {e, g}[1], {j, k}[1], {a, b}[2], {c, d}[2], {g, i}[2], {h, l}[2],
{a, g}[3], {e, h}[3], {g, j}[3], {a, f }[4], Soma mı́nima: 24
b) Prim: {d, g}[1], {b, d}[2], {a, d}[3], {a, c}[2], {b, e}[3], {e, f }[2], {g, h}[3], {h, k}[1], {j, k}[2], {i, j}[2], {i, l}[2], {j, m}[3],
Soma mı́nima: 26; b) {d, g}[1], {h, k}[1], {a, c}[2], {b, d}[2], {e, f }[2], {i, j}[2], {i, l}[2],
{j, k}[2], {a, d}[3], {b, e}[3], {g, h}[3], {j, m}[3], Soma mı́nima: 26.

141
19.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.

Links 19. Links das Vı́deo Aulas Referentes ao Capı́tulo 19


Árvores Geradoras Mı́nimas
Algoritmo de Prim
Exemplo Envolvendo o Algoritmo de Prim
Algoritmo de Kruskal
Exemplo Envolvendo o Algoritmo de Kruskal

142
Capı́tulo 20

Anexos: Programas em Python

Neste capı́tulo apresentaremos algumas implementações, em linguagem Python, de programas referentes à teoria
dos grafos. Boa parte dos programas foram retirados do site GeeksforGeeks. Pequenas modificações de alguns pro-
gramas foram feitas, contudo, nada que altere sua estrutura primordial ou desmereça seus desenvolvedores originais -
citados ao final de cada código.

Figura 20.1: Site GeeksforGeeks.

Para a compilação dos programas usamos a plataforma online OnlineGDBBeta : Linguagem Python 3.

Figura 20.2: Plataforma OnlineGDBBeta : Linguagem Python 3.

143
Os programas a seguir foram aplicados em grafos especı́ficos. Alguns deles necessitam da inserção de arestas
de forma simétrica, isto é cada aresta (a, b) contará com sua “irmã” (b, a) uma vez que consideram arestas de ida
e volta. Neste tipo de programa, uma vez que certa aresta tenha sido “usada” ela costuma “sair” do conjunto de
possibilidades no futuro, ou até mesmo o sentido importar. A não inserção de tal aresta no programa pode acarretar
saı́das incorretas. (Exmperiência própria!) Por exemplo, alguns programas terão arestas representadas por comandos
como: G.diri[a][b]=1 ou graph.add edge(a,b). Em caso de uma saı́da de dados incorreta, recomenda-se, para cada
caso acima, a inserção dos comandos G.diri[b][a]=1 ou graph.add edge(b,a) na parte correspondente às entradas (caso
não constem). Até mesmos os programas listados a seguir podem apresentar essa necessidade e não o tenhamos feito.
O ideal é aplicá-los em alguns outros grafos e observar a necessidade de algum ajuste extra.

144
Programa 1. O programa a seguir, em linguagem Python 3, exibe o grau de um vértice arbitrário. [Link Online
from GeeksforGeeks]

Figura 20.3: Grau de Um Vértice.

145
Nas linhas 21 − 37 e 55 − 56 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.4 para ilustrar a
aplicação do programa. Na linha 61 foi inserido o vértice que se deseja saber o grau. As saı́das, considerando o grafo
dado, são dispostas na Figura 20.5.

Figura 20.4: Grafo Simples.

Figura 20.5: Saı́das do Programa.

146
Programa 2. O programa a seguir, em linguagem Python 3, verifica se um grafo é bipartido ou não. [Link Online
from GeeksforGeeks]

147
Figura 20.6: Verificação de Bipartição.

Nas linhas 65 − 70 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.7 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.8.

Figura 20.7: Grafo Simples.

Figura 20.8: Saı́das do Programa.

148
Programa 3. O programa a seguir, em linguagem Python 3, apresenta a lista de adjacências associadas a um grafo.
[Link Online from GeeksforGeeks]

Figura 20.9: Lista de Adjacência de Um Grafo.

149
Nas linhas 50 − 58 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.10 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.11.

Figura 20.10: Grafo Simples.

Figura 20.11: Saı́das do Programa.

150
Programa 4. O programa a seguir, em linguagem Python 3, mostra se existe ou não um caminho entre dois vértices
em um grafo orientado. [Link Online from GeeksforGeeks]

Figura 20.12: Existência de Caminho Entre Dois Vértices em Um Grafo Orientado.

151
Nas linhas 48 − 54 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.13 para ilustrar a aplicação do
programa. Na linha 56 foram inseridos o vértice inicial e o vértice final que se deseja verificar a existência de um
caminho. As saı́das, considerando o grafo dado, são dispostas na Figura 20.14.

Figura 20.13: Grafo G.

Figura 20.14: Saı́das do Programa.

152
Programa 5. O programa a seguir, em linguagem Python 3, verifica se um grafo tem um circuito de Euler ou tem
um caminho de Euler ou nenhum dos dois. [Link Online from GeeksforGeeks]

153
Figura 20.15: Verificação de Gráfico Euleriano.

Nas linhas 97−121 foram inseridos, a tı́tulo de exemplo, os grafos dispostos na Figura 20.16 para ilustrar a aplicação
do programa. As saı́das, considerando os grafos dados, são dispostas na Figura 20.17.

154
Figura 20.16: Grafos Simples F , G e H.

Figura 20.17: Saı́das do Programa.

155
Programa 6. O programa a seguir, em linguagem Python 3, aplica o algoritmo de Fleury em um grafo. Caso o grafo
não tenha um circuito ou caminho de Euler o programa exibe um caminho ou circuito interno qualquer (O ideal é
aplicar o programa em um grafo contendo um caminho ou circuito de Euler.) [Link Online from GeeksforGeeks]

156
Figura 20.18: Circuito ou caminho Euleriano.

Nas linhas 93 − 100 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.19 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.20.

Figura 20.19: Grafo G.

157
Figura 20.20: Saı́das do Programa.

158
Programa 7. O programa a seguir, em linguagem Python 3, exibe, se existir, um circuito de Hamilton. [Link Online
from GeeksforGeeks]

159
Figura 20.21: Circuito Hamiltoniano.

Nas linhas 85 − 88 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.22 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.23.

Figura 20.22: Grafo G.

Figura 20.23: Saı́das do Programa.

160
Programa 8. O programa a seguir, em linguagem Python 3, apresenta o caminho de menor custo entre dois vértices
arbitrários usando o algoritmo de Dijkstra. [Link Online from linuxtut.com]

Figura 20.24: Algoritmo de Dijkstra.

161
Nas linhas 4 − 12 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.25 para ilustrar a aplicação do
programa. Note que as distâncias são calculadas entre o primeiro e último vértice. Neste caso, a matriz inserida
mudaria caso os vértices inicial e final mudassem. As saı́das, considerando o grafo dado, são dispostas na Figura 20.26.

Figura 20.25: Grafo G.

Figura 20.26: Saı́das do Programa.

162
Programa 9. O programa a seguir, em linguagem Python 3, apresenta os menores custos entre um vértice arbitrário
e todos os outros vértices de um grafo. Os comentários foram removidos para diminuir o número de linhas do código.
[Link Online from GeeksforGeeks]

163
.

164
Figura 20.27: Algoritmo de Dijkstra.

165
Nas linhas 146 − 168 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.28 para ilustrar a aplicação
do programa1 . Na linha 169 foi inserido o vértice a partir do qual se deseja obter os custos mı́nimos em relação aos
demais vértices do grafo. As saı́das, considerando o grafo dado, são dispostas na Figura 20.29.

Figura 20.28: Grafo G.

Figura 20.29: Saı́das do Programa.

1O grafo considerado trata-se de uma leve modificação nos rótulos dos vértices do grafo dado no Programa 8 como se observa facilmente.
O grafo e os pesos são essencialmente os mesmos!

166
Programa 10. O programa a seguir, em linguagem Python 3, exibe o número de regiões que um grafo planar divide
o plano. [Link Online from GeeksforGeeks]

Na linha 14 foram inseridos os dados correspondendo ao número de vértices e arestas de um grafo planar. A saı́da,
considerando os dados inseridos, está disposta na Figura 20.30.

Figura 20.30: Saı́das do Programa.

167
Programa 11. O programa a seguir, em linguagem Python 3, apresenta um algoritmo guloso para atribuir cores aos
vértices de um grafo. [Link Online from GeeksforGeeks]

168
Figura 20.31: Algoritmo Guloso Para Coloração de Um Grafo.

Nas linhas 60 − 68 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.32 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.33.

Figura 20.32: Grafo G.

Figura 20.33: Saı́das do Programa.

169
Programa 12. O programa a seguir, em linguagem Python 3, apresenta a travessia em pré-ordem. [Link Online from
tutorialspoint]

Figura 20.34: Travessia em Pré-Ordem.

170
Nas linhas 43 − 49 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.35 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.36.

Figura 20.35: Grafo G.

Figura 20.36: Saı́das do Programa.

171
Programa 13. O programa a seguir, em linguagem Python 3, apresenta a travessia em ordem simétrica. [Link Online
from tutotialspoint]

Figura 20.37: Travessia em Ordem Simétrica.

172
Nas linhas 43 − 49 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.38 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.39.

Figura 20.38: Grafo G.

Figura 20.39: Saı́das do Programa.

173
Programa 14. O programa a seguir, em linguagem Python 3, apresenta a travessia em pós-ordem. [Link Online from
tutorialspoint]

Figura 20.40: Travessia em Pós-Ordem.

174
Nas linhas 43 − 49 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.41 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.42.

Figura 20.41: Grafo G.

Figura 20.42: Saı́das do Programa.

175
Programa 15. O programa a seguir, em linguagem Python 3, apresenta a ordem de escolha dos vértices considerando
a Busca em Profundidade. [Link Online from GeeksforGeeks]

Figura 20.43: Busca em Profundidade.

176
Nas linhas 52 − 61 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.44 para ilustrar a aplicação do
programa (note que as arestas contam com duas orientações uma vez que há retorno em alguns casos). Na linha 65
foi inserido o vértice raiz. As saı́das, considerando o grafo dado, são dispostas na Figura 20.45.

Figura 20.44: Grafo G.

Figura 20.45: Saı́das do Programa.

177
Programa 16. O programa a seguir, em linguagem Python 3, apresenta a ordem de escolha dos vértices considerando
a Busca em Largura. [Link Online from GeeksforGeeks]

178
Figura 20.46: Busca em Largura.

Nas linhas 55 − 64 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.47 para ilustrar a aplicação do
programa (note que as arestas contam com duas orientações uma vez que há retorno em alguns casos). Na linha 65
foi inserido o vértice raiz. As saı́das, considerando o grafo dado, são dispostas na Figura 20.48.

Figura 20.47: Grafo G.

Figura 20.48: Saı́das do Programa.

179
Programa 17. O programa a seguir, em linguagem Python 3, é a implementação do algoritmo de Prim. [Link Online
from GeeksforGeeks]

180
Figura 20.49: Algoritmo de Prim.

Nas linhas 73 − 78 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.50 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.51.

Figura 20.50: Grafo G.

Figura 20.51: Saı́das do Programa.

181
Programa 18. O programa a seguir, em linguagem Python 3, é a implementação do algoritmo de Kruskal. [Link
Online from GeeksforGeeks]

182
Figura 20.52: Algoritmo de Kruskal.

183
Nas linhas 102 − 109 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.53 para ilustrar a aplicação
do programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.54.

Figura 20.53: Grafo G.

Figura 20.54: Saı́das do Programa.

184
Referências

Principal
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Secundárias
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
[5] BIGGS, N.; LLOYD, E. and WILSON, R. (1986), Graph Theory, 1736-1936, Oxford University Press
[6] HOLANDA, Bruno. Teoria dos Grafos OBM. Consultado em 14 de junho de 2018
[7] CAYLEY, A. (1857), On the theory of the analytical forms called trees, Philosophical Magazine, Series IV, 13 (85):
172-176, doi:10.1017/CBO9780511703690.046
[8] TUTTE, W.T. (2001), Graph Theory, ISBN 978-0-521-79489-3, Cambridge University Press, p. 30, consultado em
14 de março de 2016
[9] The Four Color Theorem. Mathpages.com. Consultado em 3 de junho de 2016.
Programas em Python 3
[10] https://www.geeksforgeeks.org
[11] https://www.tutorialspoint.com/

185

Você também pode gostar