SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
Lista de Exercícios - Teoria dos Grafos
Exercícios do Capítulo 2 - Questões 1, 2, 3, 6 e 8
Michel Alves dos Santos ∗
Março de 2011
∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi-
chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo-
nardo Viana Pereira.
1
Conteúdo
Lista de Figuras 2
1 Questão 1 3
1.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 d) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 e) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 f) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.7 g) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.8 h) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.9 i) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.10 j) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.11 k) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Questão 2 5
2.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 d) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.5 e) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.6 f) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.7 g) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.8 h) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.9 i) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Questão 3 7
3.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3 c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4 d) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.5 e) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.6 f) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4 Questão 6 9
5 Questão 8 10
5.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.3 c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Lista de Figuras
1 Grafo apresentado para primeira questão. A primeira figura indica apenas as liga-
ções entre os vértices, a segunda apresenta uma numeração para as arestas. . . . . 3
2 Grafo orientado fornecido para a segunda questão. . . . . . . . . . . . . . . . . . . 5
3 Grafo orientado fornecido para a segunda questão com arestas numeradas. . . . . . 7
4 Grafo fornecido para a terceira questão. . . . . . . . . . . . . . . . . . . . . . . . . 8
5 Exemplo de grafo para cálculo do grau. Primeiro Passo da Demonstração. . . . . . 9
2
6 Exemplo de grafo para cálculo do grau. Segundo Passo da Demonstração. . . . . . 9
7 Exemplo de grafos não isomorfos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1 Questão 1
Figura 1: Grafo apresentado para primeira questão. A primeira figura indica apenas as ligações
entre os vértices, a segunda apresenta uma numeração para as arestas.
1.1 a)
A seguir, duas condificações de duas soluções diferentes:
• abcdebdae;
• abcdaebde.
1.2 b)
Vértice Vértice(s) adjacente(s)
a b, d, e
b a, c, d, e
c b, d
d a, b, c, e
e a, b, d
1.3 c)
a b c d e
a 0 1 0 1 1
b 1 0 1 1 1
c 0 1 0 1 0
d 1 1 1 0 1
e 1 1 0 1 0
3
1.4 d)
1 2 3 4 5 6 7 8
a 1 1 1 0 0 0 0 0
b 1 0 0 0 1 1 0 0
c 0 0 0 1 0 0 1 0
d 0 1 0 0 1 0 0 1
e 0 0 1 0 0 1 0 1
1.5 e)
Verificando se cbdeadeab é uma solução (sem usar o desenho).
Usando a lista de adjacência temos os seguintes passos:
c → d
d → b
b → e
e → a
d → e
e → a
O passo em destaque já foi um passo realizado antes, isso que dizer que uma aresta foi repetida,
portanto essa codificação não é uma solução para o problema tratado.
Acho também que um computador, convenientente programado, poderia realizar esta verifica-
ção. Basta apenas criar um algoritmo onde para cada percurso, o mesmo deve ser armazenado
e verificado para cada outro percurso realizado, ou seja, deve-se ter uma implementação de um
percurso simples.
1.6 f)
A solução abcdeadbe pode ser codificada como 14783256.
Eu codificaria a solução numérica, pois como a mesma faz referência as arestas, fica mais fácil
identificar se uma codificação dada é válida para esse problema, basta verificar se existe um número
repetido na sequência.
A seguir as codificações das sequências do item (e):
adcbedbae → 27468513
eabdebcda → 31586472
cbdeadeab → 75632831
4
1.7 g)
• 12345678 não é solução, pois não é possível sair diretamente da aresta 2 para 3;
• 12345687 também não é solução pelo mesmo motivo do item anterior;
• 35742861 também não é solução pelo mesmo motivo do item anterior.
Usando a lista de incidência e procurando por outros vértices que também incidam na mesma
aresta e que possuam uma ligação para a próxima aresta da sequência fornecida.
1.8 h)
É possível formar 88
= 16.777.216 sequências.
1.9 i)
Um computador que examinasse 1.000.000 sequências por segundo, levaria pelo menos
Tempo =
88
1.000.000
=
16.777.216
1.000.000
= 16, 777216
ou seja,
16.777.216seq
106seq/s
= 16, 777216s, para descobrir todas as soluções.
1.10 j)
Para um grafo com 20 arestas, seria possível formar o seguinte número de sequências:
2020
= 104.857.600.000.000.000.000.000.000
1.11 k)
Um computador que examinasse 1.000.000 seq/s, levaria pelo menos:
Tempo =
202
0
1.000.000
=
104.857.600.000.000.000.000.000.000
1.000.000
= 104.857.600.000.000.000.000s
2 Questão 2
Figura 2: Grafo orientado fornecido para a segunda questão.
5
2.1 a)
A seguir, duas condificações de duas soluções diferentes:
• acbcdabd;
• abcbdacd.
2.2 b)
Vértice Vértice(s) adjacente(s)
a b, c
b c, d
c b, d
d a
2.3 c)
a b c d
a 0 1 1 0
b 0 0 1 1
c 0 1 0 1
d 1 0 0 0
2.4 d)
1 2 3 4 5 6 7
a 1 1 0 0 0 0 -1
b -1 0 1 1 -1 0 0
c 0 -1 -1 0 1 1 0
d 0 0 0 -1 0 -1 1
2.5 e)
Verificando se acdabcbd é uma solução (sem usar o desenho). Usando a lista de adjacência
temos os seguintes passos:
a → c
c → d
d → a
a → b
b → c
c → b
b → d
Logo, todas as arestas foram percorridas, e não houve repetições, logo a sequência acdabcbd
é uma solução. Verificando se abdacbda é uma solução (sem usar o desenho). Usando a lista de
adjacência temos os seguintes passos:
a → b
b → d
d → a
a → c
c → b
b → d
O passo em destaque já foi um passo realizado antes, isso quer dizer que uma aresta foi repetida,
portanto essa codificação não é uma solução para o problema tratado.
6
2.6 f)
Figura 3: Grafo orientado fornecido para a segunda questão com arestas numeradas.
Através da figura podemos observar que a sequência 1354726 é uma solução válida. A seguir
as codificações das sequências do item (e):
acdabcbd → 2671354
abdacbda → 1472547
2.7 g)
• 1234567 não é solução, pois não é possível sair diretamente da aresta 1 para 2;
• 1234567 não é solução pelo mesmo motivo do item anterior;
• 3574261 não é solução, pois não é possível sair diretamente da aresta 5 para 7.
2.8 h)
É possível formar 77
= 823.543 sequências.
2.9 i)
Um computador que examinasse 1.000.000 seq/s, levaria pelo menos
823.543seq
106seq/s
= 0.823543s,
para descobrir todas as soluções.
3 Questão 3
3.1 a)
Logo abaixo a lista de adjacência do grafo da figura acima:
Vértice Vértice(s) adjacente(s)
A B, C
B A, C, D
C A, B, D
D B, C
7
Figura 4: Grafo fornecido para a terceira questão.
3.2 b)
Logo abaixo a matriz de adjacência:
A =
A B C D
A 0 1 1 0
B 1 0 1 1
C 1 1 0 1
D 0 1 1 0
3.3 c)
B =
1 2 3 4 5
A 1 1 0 0 0
B 1 0 1 1 0
C 0 1 1 0 1
D 0 0 0 1 1
3.4 d)
Calculando o produto A2
:




0 1 1 0
1 0 1 1
1 1 0 1
0 1 1 0



 ∗




0 1 1 0
1 0 1 1
1 1 0 1
0 1 1 0



 =




2 1 1 2
1 3 2 1
1 2 3 1
2 1 1 2




O tamanho (comprimento) de um caminho é o número de arestas do mesmo, ou seja, número de
vértices menos um. Quantos caminhos distintos de tamanho n existem conectando dois vértices de
um dado grafo G? Este valor pode ser computado multiplicando a matriz de adjancência do grafo
G por ela mesma n vezes. Se A é a matriz de adjacência de um grafo G, a entrada aij da matriz
A2
indica a quantidade de caminhos de tamanho 2 conectando vi a vj no grafo G. Este resultado
é válido para caminhos de tamanho n calculando An
. Logo os números na diagonal significam o
número de caminhos de tamanho 2 que existem de um vértice para ele mesmo.
3.5 e)
Calculando o produto B · Bt
:




1 1 0 0 0
1 0 1 1 0
0 1 1 0 1
0 0 0 1 1



 ∗






1 1 0 0
1 0 1 0
0 1 1 0
0 1 0 1
0 0 1 1






=




2 1 1 0
1 3 1 1
1 1 3 1
0 1 1 2




8
Os valores da diagonal principal represetam o número de conexões ou caminhos que o respectivo
vértice possui a partir dele. Fora da diagonal o número de conexões que o respectivo vértice possui
com os demais.
3.6 f)
Calculando o produto Bt
· B:






1 1 0 0
1 0 1 0
0 1 1 0
0 1 0 1
0 0 1 1






∗




1 1 0 0 0
1 0 1 1 0
0 1 1 0 1
0 0 0 1 1



 =






2 1 1 1 0
1 2 1 0 1
1 1 2 1 1
1 0 1 2 1
0 1 1 1 2






4 Questão 6
Se para cada ligação entre vértices inserimos/aumentamos um grau para cada vértice partici-
pante da ligação então, teremos para o seguinte grafo visto abaixo um número de vértices |V | = 2
e número de arestas |E| = 1.
Figura 5: Exemplo de grafo para cálculo do grau. Primeiro Passo da Demonstração.
Para o próximo grafo teríamos o mesmo, um número de vértices |V | = 3 e número de arestas
|E| = 2
Figura 6: Exemplo de grafo para cálculo do grau. Segundo Passo da Demonstração.
E por indução nós podemos contruir uma forma de chegar até
v∈V
d(v) = 2m
Onde d(v) é a função que retorna o grau de um determinado vértice v ∈ V , V o conjunto de
vértices do grafo e m o número de arestas. Observando a matriz de incidência notamos que
cada linha determina o grau de um vértice. Como para cada aresta aparecem dois 1s na matriz
de incidência, a soma de todos os graus equivale a contar duas vezes cada aresta. Uma outra
observação interessante é que o número de vértices de grau impar em um grafo orientado sempre
é par:
Nv(d(v)impar) = 2k
Sendo Nv a função que classifica e retorna o número de vértices que possuem grau ímpar, e esse
número sempre será da forma 2k. Como a soma dos graus de todos os vértices é um número par
(2n) é impossível que só um tenha grau ímpar. Os dois fatos relacionados nessa questão a priori
podem parecer coincidência mas são fortes consequências de leis encontradas na Álgebra Linear.
Não faremos uso dessas ferramentas de caráter mais avançado, iremos apenas formalizar esses
9
fatos de maneira bem simples. Para isso denotaremos um grafo pela letra G e representaremos
por V (G) e A(G) respectivamente, os conjuntos de vértices e das arestas de G.
Teorema 1 (Relação Entre a Soma dos Graus e a Quantidade de Arestas). Para todo grafo G
v∈V (G)
d(v) = 2 · m
Isto é: “A soma dos graus dos vértices de um grafo é sempre o dobro do número de arestas.”
Demonstração. Quando contamos os graus dos vértices estamos contando as extremidades das
arestas uma vez. Como cada aresta tem duas extremidades, no processo de contagem cada aresta
foi computada duas vezes.
Corolário 1 (Ou Lema do Aperto de Mãos). Todo grafo G possui um número par de vértices de
grau ímpar.
Nv(d(v)impar) = 2k
Demonstração. Se tivéssemos um número ímpar de vértices de grau ímpar a soma dos graus seria
ímpar. Mas a soma dos graus é o dobro do número de arestas e, portanto é um número par.
5 Questão 8
5.1 a)
Suponha que exista um grafo G bipartido. Se G não contém ciclos, então não há o que
provar. Suponha que G tem um ciclo Cn = v0v1, v1v2, ..., vs−1vs. Supondo que v0 ∈ V1, então
v1 ∈ V1, v2 ∈ V1, etc. Ou seja, vi ∈ V1 se e somente se i é par. Como v0 = vs, s deve ser par.
Desta forma, utilizamos um número par de arestas.
5.2 b)
Sim. Seja v0 ∈ V (G). Vamos separar os vértices de G em dois subconjuntos V1 e V2 de tal
modo que v0 ∈ V2 e v ∈ V1 se e somente se existe um caminho de comprimento ímpar de v0 a v.
Então V1 e V2 são disjuntos. De fato, suponha que exista w ∈ V1 ∩ V2. Podemos supor que w é o
vétice “mais próximo” de v0 tal que isso acontece. Então existiria um caminho C1 de comprimento
par de v0 a w e um caminho C2 de v0 a w de comprimento ímpar, que não se cruzam. Então
C1 ∪ C2 seria um ciclo de comprimento ímpar, o que por absurdo não é válido.
5.3 c)
Observa-se na figura abaixo que no grafo G1 existe um ciclo fechado ímpar no vértice A. Já
no grafo G2, todo ciclo fechado em A é par.
Figura 7: Exemplo de grafos não isomorfos.
10
Teoria dos Grafos - Exercícios do Capítulo 3
Questões 1, 2 e 5
Michel Alves dos Santos ∗
Abril de 2011
∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi-
chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo-
nardo Viana Pereira.
1
Conteúdo
Lista de Figuras 3
Lista de Tabelas 3
1 Questão 1. Execute o algoritmo de Dijkstra com o exemplo do item 3.2, tro-
cando antes o sinal do custo do arco (E,B). 4
2 Questão 2. Considere os dois grafos utilizados nos algoritmos de Dijkstra e
Bellman-Ford. 5
2.1 Aplique o algoritmo de Dijkstra, acompanhando a formalização, aos dois grafos, use
os vértices A, no primeiro, e 1, no segundo, como origem. . . . . . . . . . . . . . . 5
2.1.1 Para o primeiro grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 Para o segundo grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Aplique o algoritmo de Bellmann-Ford aos dois grafos (mesma observação). . . . . 9
2.2.1 Para o primeiro grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.2 Para o segundo grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 No segundo grafo, mude o valor do arco(3,5) para -2 e aplique os dois algoritmos.
Observe os resultados obtidos e interprete. . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.1 Dijkstra: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.2 Bellmann-Ford: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Questão 5. Utilizando o grafo a seguir, aplique o algoritmo de Dijkstra para
achar a menor distância do vértice A aos outros vértices e construa a arbores-
cência de distâncias a partir de A. 12
2
Lista de Figuras
1 Primeira Questão. Distâncias em quilômetros entre as cidades de uma certa região. 4
2 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 5
3 Grafos fornecidos para a questão de número 2. . . . . . . . . . . . . . . . . . . . . 5
4 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 7
5 Arborescência de distâncias a partir do vértice (1). . . . . . . . . . . . . . . . . . . 9
6 Grafo com o valor do arco (3,5) invertido. . . . . . . . . . . . . . . . . . . . . . . . 10
7 Grafo fornecido para a questão de número 5. . . . . . . . . . . . . . . . . . . . . . 12
8 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 13
Lista de Tabelas
1 1o
Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo
“Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Ante-
rior” indica o vértice anterior pelo qual o caminho está sendo contruído. . . . . . . 4
2 2o
Passo. Fechando o vértice C pois não existe menor distância. . . . . . . . . . . . 4
3 3o
Passo. Fechando o vértice D pois não existe menor distância. . . . . . . . . . . . 4
4 4o
Passo. Fechando o vértice E pois não existe menor distância. . . . . . . . . . . . 4
5 5o
Passo. Fechando o vértice F pois não existe menor distância. . . . . . . . . . . . 4
6 Passo Final. Fechando o vértice B* pois não existe menor distância. Todos os
vértices foram avaliados, com isso construímos a tabela com as distâncias. . . . . . 5
7 1o
Passo. Construindo a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 5
8 2o
Passo. Inicializando a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 6
9 3o
Passo. Passando pelo vértice C. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
10 4o
Passo. Passando pelo vértice D. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
11 5o
Passo. Passando pelo vértice E. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
12 6o
Passo. Passando pelo vértice B. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
13 Passo Final. Obtenção de todas as distâncias a partir do vértice A. . . . . . . . . . 7
14 1o
Passo. Construindo a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 8
15 2o
Passo. Inicializando a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 8
16 3o
Passo. Passando pelo vértice (2). . . . . . . . . . . . . . . . . . . . . . . . . . . 8
17 4o
Passo. Passando pelo vértice (3). . . . . . . . . . . . . . . . . . . . . . . . . . . 8
18 5o
Passo. Passando pelo vértice (4). . . . . . . . . . . . . . . . . . . . . . . . . . . 9
19 6o
Passo. Passando pelo vértice (5). . . . . . . . . . . . . . . . . . . . . . . . . . . 9
20 Passo Final. Obtenção de todas as distâncias a partir do vértice (1). . . . . . . . . 9
21 1o
Passo. Iniciando tabela com distâncias a partir do vértice (1). Usando o valor
1000 para representar infinito. Fechando o vértice (1), pois é nosso vértice de partida. 10
22 2o
Passo. Obtendo as rotas para os vértices (2) e (5) apartir do vértice (1). . . . . 11
23 3o
Passo. Obtendo as rotas para os vértices (3) e (4) apartir do vértice (2). . . . . 11
24 4o
Passo. Obtendo as rotas para os vértices (4) e (5) apartir do vértice (3). . . . . 11
25 5o
Passo. Obtendo rota para o vértice (1) apartir do vértice (4). Observe que o
vértice (1) já se encontra fechado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
26 6o
Passo. Obtendo rota para o vértice (1) e (4) apartir do vértice (5). . . . . . . . 11
27 Tabela com todas as distâncias a partir do vértice (1). Houve uma redução nas
distâncias devido ao caminho com valor negativo. . . . . . . . . . . . . . . . . . . . 11
28 1o
Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo
“Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Ante-
rior” indica o vértice anterior pelo qual o caminho está sendo contruído. . . . . . . 12
29 Último Passo. Construção da tabela com as distâncias a partir do vértice A. . . . . 12
3
1 Questão 1. Execute o algoritmo de Dijkstra com o exem-
plo do item 3.2, trocando antes o sinal do custo do arco
(E,B).
Figura 1: Primeira Questão. Distâncias em quilômetros entre as cidades de uma certa região.
A* B C D E F
Distância 0 ∞ ∞ ∞ ∞ ∞
Anterior - - - - - -
Tabela 1: 1o
Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo
“Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Anterior” indica o
vértice anterior pelo qual o caminho está sendo contruído.
A* B C* D E F
Distância 0 12 4 ∞ ∞ ∞
Anterior - A A - - -
Tabela 2: 2o
Passo. Fechando o vértice C pois não existe menor distância.
A* B C* D* E F
Distância 0 12 4 6 ∞ 12
Anterior - A A C - D
Tabela 3: 3o
Passo. Fechando o vértice D pois não existe menor distância.
A* B C* D* E* F
Distância 0 12 4 6 6 12
Anterior - A A C C E
Tabela 4: 4o
Passo. Fechando o vértice E pois não existe menor distância.
A* B C* D* E* F*
Distância 0 12 4 6 6 12
Anterior - A A C C E
Tabela 5: 5o
Passo. Fechando o vértice F pois não existe menor distância.
4
A* B* C* D* E* F*
Distância 0 12 4 6 6 12
Anterior - A A C C E
Tabela 6: Passo Final. Fechando o vértice B* pois não existe menor distância. Todos os vértices
foram avaliados, com isso construímos a tabela com as distâncias.
Figura 2: Arborescência de distâncias a partir do vértice A.
2 Questão 2. Considere os dois grafos utilizados nos algo-
ritmos de Dijkstra e Bellman-Ford.
Figura 3: Grafos fornecidos para a questão de número 2.
2.1 Aplique o algoritmo de Dijkstra, acompanhando a formalização, aos
dois grafos, use os vértices A, no primeiro, e 1, no segundo, como
origem.
2.1.1 Para o primeiro grafo teremos:
Procuramos a cidade mais próxima de A. Depois, sucessivamente, procuramos entre as cidades
não visitadas aquela que tem a menor distância desde A, diretamente ou passando por alguma
cidade já visitada, anotando sempre o percurso escolhido. Estamos considerando que nunca te-
remos distâncias negativas, pois isso atrapalharia o algoritmo, já que o mesmo não sabe lidar
com distâncias negativas(ele pode entrar em looping). Começamos por construir uma tabela de
distâncias entre os vértices. Para os vértices não ligados consideraremos a distância como infinita.
Para os próximos passos usaremos o número 1000 para representar a distância infinita (∞) que
A* B C D E F
A 0 12 4 ∞ ∞ ∞
B ∞ 0 6 6 ∞ ∞
C ∞ 10 0 ∞ 2 ∞
D ∞ ∞ 8 0 ∞ 6
E ∞ 2 ∞ ∞ 0 6
F ∞ ∞ ∞ ∞ ∞ 0
Tabela 7: 1o
Passo. Construindo a tabela de distâncias.
foi colocada na tabela de distâncias para representar a falta de ligação entre os vértices.
5
Inicialização: A distância de A para todos os outros vértices é marcada como infinita(nesse
caso 1000), exceto para o próprio A(distância 0). Marcamos A como fechado, usando um asterisco,
e o vértice anterior fica vazio porque A é o nosso vértice de partida.
A* B C D E F
Distância 0 ∞ ∞ ∞ ∞ ∞
Anterior - - - - - -
Tabela 8: 2o
Passo. Inicializando a tabela de distâncias.
• 2o
Passo: Que cidades posso alcançar a partir de A e qual é a distância entre elas?
• Resposta: B, distância = 12 (mudamos para 12 pois: 12 < 1000 )
• Resposta: C, distância = 4 (mudamos para 4 pois: 4 < 1000 )
O vértice C será fechado pois sua distância não pode ser melhorada e será o nosso próximo ponto
de partida.
A* B C* D E F
Distância 0 12 4 ∞ ∞ ∞
Anterior A A A - - -
Tabela 9: 3o
Passo. Passando pelo vértice C.
• 3o
Passo: Que cidades posso alcançar a partir de C e qual é a distância entre elas?
• Resposta: B, distância = 14 (não mudamos para 14 pois: 12 < 14 )
• Resposta: D, distância = 6 (mudamos para 6 pois: 6 < 1000 )
• Resposta: E, distância = 6 (mudamos para 6 pois: 6 < 1000 )
O vértice D será fechado pois sua distância não pode ser melhorada e será o nosso próximo ponto
de partida.
A* B C* D* E F
Distância 0 12 4 6 6 ∞
Anterior A A A C C -
Tabela 10: 4o
Passo. Passando pelo vértice D.
• 4o
Passo: Que cidades posso alcançar a partir de D e qual é a distância entre elas?
• Resposta: C, distância = 14 (não mudamos para 14 pois: 4 < 14 )
• Resposta: F, distância = 12 (mudamos para 12 pois: 12 < 1000 )
Por enquanto nenhum vértice será fechado mas as distâncias computadas que estavam dentro do
padrão de minimalidade serão atualizadas na tabela. Próximo ponto de partida será o vértice E.
• 5o
Passo: Que cidades posso alcançar a partir de E e qual é a distância entre elas?
• Resposta: B, distância = 8 (mudamos para 8 pois: 8 < 12)
• Resposta: F, distância = 12 (mudamos para 12 pois: 12 <= 12)
6
A* B C* D* E F
Distância 0 12 4 6 6 12
Anterior A A A C C D
Tabela 11: 5o
Passo. Passando pelo vértice E.
A* B C* D* E* F
Distância 0 8 4 6 6 12
Anterior A E A C C E
Tabela 12: 6o
Passo. Passando pelo vértice B.
O vértice E será fechado pois sua distância não pode ser melhorada e B será o nosso próximo
ponto de partida.
• 6o
Passo: Que cidades posso alcançar a partir de B e qual é a distância entre elas?
• Resposta: C, distância = 14 (não mudamos para 14 pois: 4 < 14)
• Resposta: D, distância = 14 (não mudamos para 14 pois: 6 < 14)
Porém vale observar que o vértice C já foi fechado e o vértice D também, logo o vértice B se-
ráfechado pois não existe menor distância para alcançá-lo. Além disso chegamos ao final das
verificações, logo o vértice F também será fechado e com isso teremos:
A* B* C* D* E* F*
Distância 0 8 4 6 6 12
Anterior A E A C C E
Tabela 13: Passo Final. Obtenção de todas as distâncias a partir do vértice A.
Figura 4: Arborescência de distâncias a partir do vértice A.
2.1.2 Para o segundo grafo teremos:
Começamos por construir uma tabela de distâncias entre os vértices. Para os vértices não
ligados consideraremos a distância como infinita (∞). Para os próximos passos usaremos o número
1000 para representar a distância infinita (∞) que foi colocada na tabela de distâncias para
representar a falta de ligação entre os vértices.
Inicialização: A distância de (1) para todos os outros vértices é marcada como infinita(nesse
caso 1000), exceto para o próprio (1)(distância 0). Marcamos (1) como fechado, usando um
asterisco, e o vértice anterior fica vazio porque (1) é o nosso vértice de partida.
• 2o
Passo: Que vértices posso alcançar a partir de (1) e qual é a distância entre eles?
• Resposta: (2), distância = 1 (mudamos para 1 pois: 1 < 1000 )
7
(1) (2) (3) (4) (5)
(1) 0 1 ∞ ∞ 1
(2) ∞ 0 1 2 ∞
(3) ∞ ∞ 0 4 2
(4) 3 ∞ ∞ 0 ∞
(5) 2 ∞ ∞ 1 0
Tabela 14: 1o
Passo. Construindo a tabela de distâncias.
(1)* (2) (3) (4) (5)
Distância 0 ∞ ∞ ∞ ∞
Anterior - - - - -
Tabela 15: 2o
Passo. Inicializando a tabela de distâncias.
• Resposta: (5), distância = 1 (mudamos para 1 pois: 1 < 1000 )
O vértice (2) será fechado pois sua distância não pode ser melhorada e será o nosso próximo ponto
de partida.
(1)* (2)* (3) (4) (5)
Distância 0 1 ∞ ∞ 1
Anterior - (1) - - (1)
Tabela 16: 3o
Passo. Passando pelo vértice (2).
• 3o
Passo: Que vértices posso alcançar a partir de (2) e qual é a distância entre eles?
• Resposta: (3), distância = 2 (mudamos para 2 pois: 2 < 1000 )
• Resposta: (4), distância = 3 (mudamos para 3 pois: 3 < 1000 )
O vértice (3) será fechado pois sua distância não pode ser melhorada e será o nosso próximo ponto
de partida.
(1)* (2)* (3)* (4) (5)
Distância 0 1 2 3 1
Anterior - (1) (2) (2) (1)
Tabela 17: 4o
Passo. Passando pelo vértice (3).
• 4o
Passo: Que vértices posso alcançar a partir de (3) e qual é a distância entre eles?
• Resposta: (4), distância = 6 (não mudamos para 6 pois: 3 < 6 )
• Resposta: (5), distância = 4 (não mudamos para 4 pois: 1 < 4 )
O vértice (4) não será fechado pois ainda não averiguamos se a distância pode ser melhorada e
será o nosso próximo ponto de partida.
• 4o
Passo: Que vértices posso alcançar a partir de (4) e qual é a distância entre eles?
• Resposta: (1), distância = 6 (não mudamos para 6 pois: 0 < 6 )
8
(1)* (2)* (3)* (4) (5)
Distância 0 1 2 3 1
Anterior - (1) (2) (2) (1)
Tabela 18: 5o
Passo. Passando pelo vértice (4).
(1)* (2)* (3)* (4) (5)
Distância 0 1 2 3 1
Anterior - (1) (2) (2) (1)
Tabela 19: 6o
Passo. Passando pelo vértice (5).
O vértice (4) não será fechado pois ainda não averiguamos se a distância pode ser melhorada e o
vértice (5) será o nosso próximo ponto de partida. Observe que o vértice (1) já estava fechado.
• Passo Final: Que vértices posso alcançar a partir de (5) e qual é a distância entre eles?
• Resposta: (1), distância = 3 (não mudamos para 3 pois: 0 < 3 )
• Resposta: (4), distância = 2 (mudamos para 2 pois: 2 < 3 )
O vértice (4) será fechado pois a distância não pode ser melhorada e o vértice (5) também será.
(1)* (2)* (3)* (4)* (5)*
Distância 0 1 2 2 1
Anterior - (1) (2) (5) (1)
Tabela 20: Passo Final. Obtenção de todas as distâncias a partir do vértice (1).
Figura 5: Arborescência de distâncias a partir do vértice (1).
2.2 Aplique o algoritmo de Bellmann-Ford aos dois grafos (mesma ob-
servação).
2.2.1 Para o primeiro grafo teremos:
(A, B) : dAB(∞) > d11(0) + vAB(12) → dAB = 12 anterior(B) = A
(A, C) : dAC(∞) > d11(0) + vAC(4) → dAC = 4 anterior(C) = A
(C, B) : dAB(12) < dAC(4) + vCB(10) → dAB = 12 sem modificação
(C, D) : dAD(∞) > dAC(4) + vCD(2) → dAD = 6 anterior(D) = C
(C, E) : dAE(∞) > dAC(4) + vCE(2) → dAE = 6 anterior(E) = C
(D, C) : dAC(4) < dAD(6) + vDC(8) → dAC = 4 sem modificação
(D, F) : dAF (∞) > dAD(6) + vDF (6) → dAF = 12 anterior(F) = D
9
(E, B) : dAB(12) > dAE(6) + vEB(2) → dAB = 8 anterior(B) = E
(E, F) : dAF (12) >= dAE(6) + vEF (6) → dAF = 12 anterior(F) = E
(B, C) : dAC(4) < dAB(8) + vBC(6) → dAC = 4 sem modificação
(B, D) : dAD(6) < dAB(8) + vBD(6) → dAD = 6 sem modificação
Em uma segunda iteração não haverá mudanças nos valores das distâncias.
2.2.2 Para o segundo grafo teremos:
(1, 2) : d12(∞) > d11(0) + v12(1) → d12 = 1 anterior(2) = 1
(1, 5) : d15(∞) > d11(0) + v15(1) → d15 = 1 anterior(5) = 1
(2, 3) : d13(∞) > d12(1) + v23(1) → d13 = 2 anterior(3) = 2
(2, 4) : d14(∞) > d12(1) + v24(2) → d14 = 3 anterior(4) = 2
(3, 4) : d14(3) > d13(2) + v34(4) → sem modificação
(3, 5) : d15(1) > d13(2) + v35(2) → sem modificação
(4, 1) : d11(0) > d14(3) + v41(3) → sem modificação
(5, 1) : d11(0) > d15(1) + v51(2) → sem modificação
(5, 4) : d14(3) > d15(1) + v54(1) → d14 = 2 anterior(4) = 5
Em uma segunda iteração não haverá mudanças nos valores das distâncias.
2.3 No segundo grafo, mude o valor do arco(3,5) para -2 e aplique os
dois algoritmos. Observe os resultados obtidos e interprete.
Figura 6: Grafo com o valor do arco (3,5) invertido.
2.3.1 Dijkstra:
(1)* (2) (3) (4) (5)
Distância 0 1000 1000 1000 1000
Anterior - - - - -
Tabela 21: 1o
Passo. Iniciando tabela com distâncias a partir do vértice (1). Usando o valor 1000
para representar infinito. Fechando o vértice (1), pois é nosso vértice de partida.
10
(1)* (2) (3) (4) (5)
Distância 0 1 1000 1000 1
Anterior - (1) - - (1)
Tabela 22: 2o
Passo. Obtendo as rotas para os vértices (2) e (5) apartir do vértice (1).
(1)* (2) (3) (4) (5)
Distância 0 1 2 3 1
Anterior - (1) (2) (2) (1)
Tabela 23: 3o
Passo. Obtendo as rotas para os vértices (3) e (4) apartir do vértice (2).
(1)* (2)* (3)* (4) (5)
Distância 0 1 2 3 0
Anterior - (1) (2) (2) (3)
Tabela 24: 4o
Passo. Obtendo as rotas para os vértices (4) e (5) apartir do vértice (3).
(1)* (2)* (3)* (4) (5)
Distância 0 1 2 3 0
Anterior - (1) (2) (2) (3)
Tabela 25: 5o
Passo. Obtendo rota para o vértice (1) apartir do vértice (4). Observe que o vértice
(1) já se encontra fechado.
(1)* (2)* (3)* (4)* (5)
Distância 0 1 2 1 0
Anterior - (1) (2) (5) (3)
Tabela 26: 6o
Passo. Obtendo rota para o vértice (1) e (4) apartir do vértice (5).
(1)* (2)* (3)* (4)* (5)*
Distância 0 1 2 1 0
Anterior - (1) (2) (5) (3)
Tabela 27: Tabela com todas as distâncias a partir do vértice (1). Houve uma redução nas
distâncias devido ao caminho com valor negativo.
11
2.3.2 Bellmann-Ford:
(1, 2) : d12(∞) > d11(0) + v12(1) → d12 = 1 anterior(2) = 1
(1, 5) : d15(∞) > d11(0) + v15(1) → d15 = 1 anterior(5) = 1
(2, 3) : d13(∞) > d12(1) + v23(1) → d13 = 2 anterior(3) = 2
(2, 4) : d14(∞) > d12(1) + v24(2) → d14 = 3 anterior(4) = 2
(3, 4) : d14(3) > d13(2) + v34(4) → sem modificação
(3, 5) : d15(1) > d13(2) + v35(−2) → d15 = 0 anterior(5) = 3
(4, 1) : d11(0) > d14(3) + v41(3) → sem modificação
(5, 1) : d11(0) > d15(1) + v51(2) → sem modificação
(5, 4) : d14(3) > d15(0) + v54(1) → d14 = 1 anterior(4) = 5
Em uma segunda iteração não haverá mudanças nos valores das distâncias.
3 Questão 5. Utilizando o grafo a seguir, aplique o algo-
ritmo de Dijkstra para achar a menor distância do vér-
tice A aos outros vértices e construa a arborescência de
distâncias a partir de A.
Figura 7: Grafo fornecido para a questão de número 5.
A* B C D E F G H I J
Distância 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞
Anterior - - - - - - - - - -
Tabela 28: 1o
Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo
“Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Anterior” indica o
vértice anterior pelo qual o caminho está sendo contruído.
A* B* C* D* E* F* G* H* I* J*
Distância 0 4 1 2 7 4 5 4 8 6
Anterior - A A C B D D D F H
Tabela 29: Último Passo. Construção da tabela com as distâncias a partir do vértice A.
12
Figura 8: Arborescência de distâncias a partir do vértice A.
13
Lista de Exercícios - Teoria dos Grafos
Michel Alves dos Santos ∗
Novembro de 2010
∗
Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-
mails: michel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente
Responsável: Leonardo Viana Pereira.
1
Conteúdo
Lista de Figuras 4
Lista de Tabelas 5
1 Exercícios do Capítulo 4 6
1.1 Determinine todas as árvores parciais do grafo G a seguir (Figura 1). . . . 6
1.2 Como podemos adaptar o algoritmo de Kruskal para obter o valor de uma
árvore parcial de valor máximo? . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Um grafo G é autocomplementar se e somente se: . . . . . . . . . . . . . . 7
1.4 Um problema muito conhecido é o de atravessar um rio com uma cabra, um
lobo e um cesto de alfaces, com o auxílio de um barqueiro, em um barco
que só comporta dois desses elementos (problema da travessia). Dadas as
restrições óbvias sobre quem pode, ou não, esperar lado a lado em uma
margem, monte um modelo de caminho que indique ao menos uma sequência
viável de travessia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5 Um modelo parecido é o “dos 8 litros”: você acha em um depósito de vinhos
um garrafão com capacidade para 8 litros, cheio de um vinho que você deseja
dividir meio a meio com um amigo. A dificuldade é que, no depósito, existem
apenas 2 garrafas vazias, uma com capacidade para 5 e a outra para 3 litros.
A divisão talvez seja possível passando-se vinho de uma dessas garrafas para
outra, em uma sequência. Monte um modelo que indica a sequência a ser
seguida, para que no final se tenham 4 litros na garrafa de 8 e os outros 4,
naturalmente, na de 5 litros. . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2 Exercícios do Capítulo 8 10
2.1 Mostre que, se um grafo G não orientado for euleriano, seu conjunto de
arestas poderá ser particionado em ciclos disjuntos. . . . . . . . . . . . . . 10
2.2 Explique por que, no PCC orientado, todas as extremidades de arco adici-
onadas a um vértice dado serão sempre, ou saídas, ou chegadas. . . . . . . 10
2.3 Construa uma sequência de De Brujin B(2,3). . . . . . . . . . . . . . . . . 10
2.4 Mostre que sempre existe uma sequência de De Brujin (r,s), para quaisquer
r,s inteiros positivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5 Construa um algoritmo para achar um ciclo euleriano em um grafo euleriano
não orientado, a partir da construção progressiva de ciclos ao longo de um
percurso inicial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6 Verifique se os grafos a seguir(figura 5) são hamiltonianos ou não-hamiltonianos,
justificando a resposta(Dica: Um deles é hamiltoniano e o outro não). . . . 11
2
2.7 Considere dois vértices v e w em um grafo G com n vértices. Mostre que, se
d(v) + d(w) >= n e G possui um percurso hamiltoniano entre v e w, então
G é hamiltoniano. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.8 Mostre que os grafos correspondentes aos 5 sólidos platônicos são hamilto-
nianos. Quais deles são eulerianos? . . . . . . . . . . . . . . . . . . . . . . 11
3
Lista de Figuras
1 Determinação de árvores parciais. . . . . . . . . . . . . . . . . . . . . . . . 6
2 Algumas árvores parciais do grafo G. . . . . . . . . . . . . . . . . . . . . . 6
3 Modelo para o problema da travessia. . . . . . . . . . . . . . . . . . . . . . 8
4 Problema da divisão do vinho. . . . . . . . . . . . . . . . . . . . . . . . . . 9
5 Verificação de ciclos hamiltonianos. . . . . . . . . . . . . . . . . . . . . . . 11
4
Lista de Tabelas
5
1 Exercícios do Capítulo 4
1.1 Determinine todas as árvores parciais do grafo G a seguir
(Figura 1).
Figura 1: Determinação de árvores parciais.
(a) Você pode garantir que realmente determinou todas?
(b) O processo que você utilizou seria eficaz para o grafo H?
Figura 2: Algumas árvores parciais do grafo G.
(a) Não.
(b) Seria necessário um tempo considerável de processamento uma vez que o processo
usado foi a retirada aleatória de ciclos. Como o grafo H possui vários ciclos o processo
não seria eficaz.
1.2 Como podemos adaptar o algoritmo de Kruskal para obter
o valor de uma árvore parcial de valor máximo?
É simples, basta ao invés de pegar a aresta com menor valor a cada iteração, pegar a
arestas com maior valor em cada iteração, dessa forma o resultado será o valor de uma
árvore parcial de valor máximo.
6
1.3 Um grafo G é autocomplementar se e somente se:
1. G = G.
(a) Que ordem deve ter uma árvore autocomplementar?
(b) Quais serão as árvores autocomplementares?
1.4 Um problema muito conhecido é o de atravessar um rio com
uma cabra, um lobo e um cesto de alfaces, com o auxílio de
um barqueiro, em um barco que só comporta dois desses ele-
mentos (problema da travessia). Dadas as restrições óbvias
sobre quem pode, ou não, esperar lado a lado em uma mar-
gem, monte um modelo de caminho que indique ao menos
uma sequência viável de travessia.
Levando em consideração que todos estavam na margem 1 e o objetivo é que todos
estejam na margem 2, teremos o seguinte algoritmo:
1. Barqueiro leva ovelha para margem 2.
2. Barqueiro volta só para margem 1.
3. Barqueiro leva o lobo ou cesto de alfaces para margem 2.
4. Barqueiro volta com o a ovelha.
5. Barqueiro leva o cesto de alfaces ou lobo.
6. Barqueiro volta só.
7. Barqueiro leva a ovelha.
Para montar um modelo de caminho algumas abstrações devem serem feitas. Cada nó terá
em seu rótulo um par ordenado (x,y) onde x pertence ao conjunto 1,2,3,4 representando,
respectivamente, a ovelha, o lobo, o cesto de alface e o barqueiro e y pertence ao conjunto
1,2 onde representamos, respectivamente, a margem 1 e margem 2. Ou seja, no par terá
quem está no barco e para onde está indo, lembrando que no caso onde x = 1 ou x = 2,
ou x = 3, fica subentendido que o barqueiro também se encontra no barco. A ilustração
a seguir reforça a sequência de travessia apresentada (Figura 3). Vale observar que um
algoritmo de busca em profundidade resolveria esse modelo de caminho.
7
Figura 3: Modelo para o problema da travessia.
1.5 Um modelo parecido é o “dos 8 litros”: você acha em um
depósito de vinhos um garrafão com capacidade para 8 litros,
cheio de um vinho que você deseja dividir meio a meio com
um amigo. A dificuldade é que, no depósito, existem apenas
2 garrafas vazias, uma com capacidade para 5 e a outra para
3 litros. A divisão talvez seja possível passando-se vinho de
uma dessas garrafas para outra, em uma sequência. Monte
um modelo que indica a sequência a ser seguida, para que
no final se tenham 4 litros na garrafa de 8 e os outros 4,
naturalmente, na de 5 litros.
Para a resolução desse problema propomos o seguinte algoritmo:
1. A garrafa 8L está cheia.
2. Colocamos 8L em 5L, sobrando 3 litros em 8L.
3. Colocamos 5L em 3L, sobrando 2 litros em 5L. 3 litros em 8L e 3 litros em 3L.
4. Colocamos 3L em 8L, dessa forma 8L ficará com 6 litros e 5L com 2 litros.
5. Colocamos 5L em 3L, dessa forma 3L estará com 2 litros, 5L vazia e 8L com 6 litros.
6. Colocamos o conteúdo de 8L em 5L, assim 5L ficará com 5 litros, 8L com 1 litro e
3L com 2 litros.
8
7. Colocamos o conteúdo de 5L em 3L até que 3L encha e com isso teremos 3 litros em
3L, 4 litros em 5L e 1 litro em 8L.
8. Colocamos o conteúdo de 3L em 8L e assim teremos 8L com 4 litros e 5L com 4 litros.
Para montar o modelo de caminho algumas abstrações devem serem feitas. Cada nó terá
em seu rótulo uma tupla de três ordenado (x,y,z) onde x e z pertencem ao conjunto 8,3,5
representando, respectivamente: garrafa de 8L, garrafa de 3L e garrafa de 5L e y pertence
ao conjunto 1,2,3,4,5,6,7,8 representando a quantidade de litros a serem tiradas de x e
colocadas em z. Vale observar que um algoritmo de busca em profundidade resolveria esse
modelo de caminho.
Figura 4: Problema da divisão do vinho.
9
2 Exercícios do Capítulo 8
2.1 Mostre que, se um grafo G não orientado for euleriano,
seu conjunto de arestas poderá ser particionado em ciclos dis-
juntos.
Seja G um grafo euleriano. O caso em que G não possui arestas é trivial. Sendo G
conexo e tendo pelo menos uma aresta, todo o seu vértice tem, pelo menos, grau 2.
Portanto, pelo Teorema de Euler, possui um ciclo C1. Retirando de G as arestas de C1
obtemos um subgrafo gerador G1 cujos vértices têm ainda todos grau par. Se G1 não
tem arestas, está terminada a demonstração desta implicação. Caso contrário, G1 tem
um ciclo C2 e a repetição do argumento anterior conduz-nos a um grafo G2, subgrafo
gerador de G1, cujos vértices têm grau par. Se G2 não tem arestas terminamos, caso
contrário repete-se o argumento. E continuamos com este raciocínio sucessivamente
até obtermos um grafo Gn totalmente desconexo (isto é, sem arestas). Aí teremos
uma partição das arestas de G em n ciclos. 2.2 Explique por que, no
PCC orientado, todas as extremidades de arco adicionadas a
um vértice dado serão sempre, ou saídas, ou chegadas.
2.3 Construa uma sequência de De Brujin B(2,3).
B(2, 3) : 11101000 2.4 Mostre que sempre existe uma sequência
de De Brujin (r,s), para quaisquer r,s inteiros positivos.
2.5 Construa um algoritmo para achar um ciclo euleriano
em um grafo euleriano não orientado, a partir da construção
progressiva de ciclos ao longo de um percurso inicial.
grau = 0;
soma = 0;
matrizAdjacencias[][];
N = NumeroDeLinhas(matrizAdjacencias[][]);
i = 0; //i é a linha atual
Enquanto ((soma <= 2) e ( i<= N))
{
grau = 0;
Para( j=0; j < N; j++) grau = grau + matrizAdjacencias[i][j];
10
Se (grau mod 2 == 1) soma ++; //caso seja ímpar
i++;
}
Se (soma > 2) Escreve ‘CAMINHO NÃO EXISTENTE’
Senão Escreve ‘CAMINHO EXISTENTE’
2.6 Verifique se os grafos a seguir(figura 5) são hamiltonia-
nos ou não-hamiltonianos, justificando a resposta(Dica: Um
deles é hamiltoniano e o outro não).
Figura 5: Verificação de ciclos hamiltonianos.
O primeiro grafo é hamiltoniano porque podemos passar uma única vez por cada
vértice. Já o segundo grafo, não é hamiltoniano porque não podemos encontrar um
caminho hamiltoniano. Sempre faz-se necessário passar mais de uma vez por um
vértice.
2.7 Considere dois vértices v e w em um grafo G com n
vértices. Mostre que, se d(v) + d(w) >= n e G possui um
percurso hamiltoniano entre v e w, então G é hamiltoniano.
2.8 Mostre que os grafos correspondentes aos 5 sólidos platô-
nicos são hamiltonianos. Quais deles são eulerianos?
11
Lista de Exercícios - Teoria dos Grafos
Exercícios do Capítulo 4
Michel Alves dos Santos ∗
Abril de 2011
∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi-
chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo-
nardo Viana Pereira.
1
Conteúdo
Lista de Figuras 2
1 Questão 3. Determinine todas as árvores parciais do grafo G a seguir. 2
2 Questão 6. Como podemos adaptar o algoritmo de Kruskal para obter o valor de uma
árvore parcial de valor máximo? 3
3 Questão 9. Um grafo G é autocomplementar se e somente se: 3
4 Questão 16. Um problema muito conhecido é o de atravessar um rio com uma cabra,
um lobo e um cesto de alfaces, com o auxílio de um barqueiro, em um barco que só
comporta dois desses elementos (problema da travessia). Dadas as restrições óbvias
sobre quem pode, ou não, esperar lado a lado em uma margem, monte um modelo
de caminho que indique ao menos uma sequência viável de travessia. 3
Lista de Figuras
1 Determinação de árvores parciais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Algumas árvores parciais do grafo G. . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Modelo para o problema da travessia. . . . . . . . . . . . . . . . . . . . . . . . . . 4
1 Questão 3. Determinine todas as árvores parciais do grafo G a seguir.
Figura 1: Determinação de árvores parciais.
(a) Você pode garantir que realmente determinou todas?
(b) O processo que você utilizou seria eficaz para o grafo H?
Figura 2: Algumas árvores parciais do grafo G.
2
(a) Não.
(b) Seria necessário um tempo considerável de processamento uma vez que o processo usado foi
a retirada aleatória de ciclos. Como o grafo H possui vários ciclos o processo não seria eficaz.
2 Questão 6. Como podemos adaptar o algoritmo de Kruskal para obter o valor de uma
árvore parcial de valor máximo?
É simples, basta ao invés de pegar a aresta com menor valor a cada iteração, pegar a arestas
com maior valor em cada iteração, dessa forma o resultado será o valor de uma árvore parcial de
valor máximo.
3 Questão 9. Um grafo G é autocomplementar se e somente se:
1. G = G.
(a) Que ordem deve ter uma árvore autocomplementar?
Como a ordem é pela cardinalidade ou número de vértices de um grafo então, |V(G)| será
igual a |V(G)|, onde V(X) é a função que retorna os vértices do grafo X e |V(X)| é o operador
que nos informa o número de vértices existentes no conjunto dos vértices pertencentes ao
grafo X.
(b) Quais serão as árvores autocomplementares?
Serão todas aquelas isomórficas a G.
4 Questão 16. Um problema muito conhecido é o de atravessar um rio com uma cabra,
um lobo e um cesto de alfaces, com o auxílio de um barqueiro, em um barco que só
comporta dois desses elementos (problema da travessia). Dadas as restrições óbvias
sobre quem pode, ou não, esperar lado a lado em uma margem, monte um modelo de
caminho que indique ao menos uma sequência viável de travessia.
Levando em consideração que todos estavam na margem 1 e o objetivo é que todos estejam na
margem 2, teremos o seguinte algoritmo:
1. Barqueiro leva ovelha para margem 2.
2. Barqueiro volta só para margem 1.
3. Barqueiro leva o lobo ou cesto de alfaces para margem 2.
4. Barqueiro volta com o a ovelha.
5. Barqueiro leva o cesto de alfaces ou lobo.
6. Barqueiro volta só.
7. Barqueiro leva a ovelha.
Para montar um modelo de caminho algumas abstrações devem serem feitas. Cada nó terá em seu
rótulo um par ordenado (x,y) onde x pertence ao conjunto 1,2,3,4 representando, respectivamente,
a ovelha, o lobo, o cesto de alface e o barqueiro e y pertence ao conjunto 1,2 onde representamos,
respectivamente, a margem 1 e margem 2. Ou seja, no par terá quem está no barco e para onde
está indo, lembrando que no caso onde x = 1 ou x = 2, ou x = 3, fica subentendido que o barqueiro
também se encontra no barco. A ilustração a seguir reforça a sequência de travessia apresentada
(Figura 3). Vale observar que um algoritmo de busca em profundidade resolveria esse modelo de
caminho.
3
Figura 3: Modelo para o problema da travessia.
4
Lista de Exercícios - Teoria dos Grafos
Exercícios do Capítulo 2 - Questões 10, 11, 16, 19
Michel Alves dos Santos ∗
Março de 2011
Conteúdo
Lista de Figuras 1
1 Questão 10 2
1.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Questão 11 2
2.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3 Questão 16 4
4 Questão 19 4
4.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.3 c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Lista de Figuras
1 Grafo apresentado para décima questão. A primeira figura indica apenas as ligações
entre os vértices, a segunda apresenta o grafo complementar. . . . . . . . . . . . . 2
2 Grafo bipartido original, grafo bipartido completo obtido a partir do bipartido ori-
ginal e grafo bipartido complementar obtido a partir do grafo bipartido original. . 2
3 Grafos não isomorfos - questão a). . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4 Grafos não isomorfos - questão b). . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
5 Através do Teorema de Enumeração de Polya, podemos provar que um grafo com 5
vértices e 7 arestas possui 4 grafos não isomorfos. Os números ao lado dos vértices
denotam o grau de cada vértice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi-
chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo-
nardo Viana Pereira.
1
6 Grafos não isomorfos obtidos através do software Mathematica. Usando o pacote
Combinatorica‘ podemos obter o número de grafos não isomorfos através do co-
mando NumberOfGraphs[n,k], onde n representa o número de vértices e k o número
de arestas. Através da função ListGraphs[n,k], pertencente ao mesmo pacote, po-
demos obter a estrutura de cada grafo. Finalmente, utilizando o comando Show-
GraphArray[ListGraphs[n,k]] somos capazes de desenhar todos os grafos simples
não isomorfos com n vértices e k arestas. A base para a obtenção da quantidade de
grafos não isomorfos origina-se do Teorema de Polya. . . . . . . . . . . . . . . . . . 3
7 Grafo sf-conexo com caminho em vermelho passando por todos os vértices. . . . . . 4
8 Grafo de 8 e 9 vértices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1 Questão 10
1.1 a)
Figura 1: Grafo apresentado para décima questão. A primeira figura indica apenas as ligações
entre os vértices, a segunda apresenta o grafo complementar.
Primeiramente podemos observar que a clique do grafo original deu origem a um conjunto
independente em seu respectivo grafo complementar, além disso podemos concluir que o número
de ligações para cada vértice no grafo complementar será igual ao número total de vértices menos
o antigo número de ligações mais um, ou seja:
K(v) = |V | − (d(v) + 1)
Onde K(v) é o novo grau do vértice no grafo complementar, |V | é o número de vértices no grafo
original e d(v) o grau do vértice no grafo original.
1.2 b)
Figura 2: Grafo bipartido original, grafo bipartido completo obtido a partir do bipartido original
e grafo bipartido complementar obtido a partir do grafo bipartido original.
2 Questão 11
2.1 a)
Dois grafos são isomorfos se e somente se existir uma função bijetiva entre seus conjuntos de
vértices, que preserve suas relações de adjacência. Observa-se nos grafos abaixo, que G1 possui
um vértice de grau 4 e G2, possui dois vértices de grau 4. Portanto, G1 e G2 não são isomorfos,
pois a relação de adjacência não foi preservada.
2
Figura 3: Grafos não isomorfos - questão a).
2.2 b)
Figura 4: Grafos não isomorfos - questão b).
Para esta questão vale a pena lembrar que através do teorema que relaciona o número de
arestas com a soma dos graus dos vértices de um grafo podemos checar se a construção do grafo
realmente atende a seguinte propriedade: a soma dos graus de cada vértice deve ser igual ao dobro
do número de arestas.
Figura 5: Através do Teorema de Enumeração de Polya, podemos provar que um grafo com 5
vértices e 7 arestas possui 4 grafos não isomorfos. Os números ao lado dos vértices denotam o
grau de cada vértice.
Figura 6: Grafos não isomorfos obtidos através do software Mathematica. Usando o pacote Com-
binatorica‘ podemos obter o número de grafos não isomorfos através do comando NumberOf-
Graphs[n,k], onde n representa o número de vértices e k o número de arestas. Através da função
ListGraphs[n,k], pertencente ao mesmo pacote, podemos obter a estrutura de cada grafo. Final-
mente, utilizando o comando ShowGraphArray[ListGraphs[n,k]] somos capazes de desenhar todos
os grafos simples não isomorfos com n vértices e k arestas. A base para a obtenção da quantidade
de grafos não isomorfos origina-se do Teorema de Polya.
3
3 Questão 16
A definição de grafo sf-conexo diz que para todo par de vértices u, v, existirá um caminho
de u até v e/ou existirá um caminho de v até u. Lembre-se que caminho é um tipo de
percurso em grafos orientados onde todos os arcos estão no sentido início do percurso −→ fim do
percurso(ou seja, não há voltas/ciclos). Veja o exemplo abaixo:
Figura 7: Grafo sf-conexo com caminho em vermelho passando por todos os vértices.
4 Questão 19
4.1 a)
Nenhum grafo antirregular com n vértices pode ter mais que n − 1 graus diferentes.
4.2 b)
Se uma sequência de graus gerar um único grafo ela será chamada unigráfica. As sequências
de graus dos grafos antirregulares são unigráficas.
4.3 c)
Figura 8: Grafo de 8 e 9 vértices.
4
Teoria dos Grafos - Exerc´ıcios do Cap´ıtulo 3
Algoritmo de Dijkstra e Bellmann-Ford
Michel Alves dos Santos ∗
Abril de 2011
∗Bacharelando em Ciˆencia da Computa¸c˜ao, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi-
chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Respons´avel: Leo-
nardo Viana Pereira.
1
Conte´udo
Lista de Figuras 2
Lista de Tabelas 2
1 Algoritmo de Dijkstra. 3
2 Algoritmo de Bellmann-Ford. 4
3 Algoritmos de Dijkstra e Bellmann-Ford. 4
4 Sa´ıda Produzida Pela Aplica¸c˜ao. 4
Lista de Figuras
1 Grafo utilizado para averiguar a efetividade da implementa¸c˜ao do Algoritmo de
Dijkstra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Arborescˆencia de distˆancias obtida atrav´es da aplica¸c˜ao do Algoritmo de Dijkstra.
Esta arborescˆencia pode ser constru´ıda com base nos valores armazenados na tabela
de distˆancias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3 Grafo utilizado para averiguar a efetividade da implementa¸c˜ao do Algoritmo de
Bellmann-Ford. Ao final do processo obtivemos a mesma arborescˆencia de distˆancias. 4
Lista de Tabelas
1 Constru¸c˜ao da tabela de distˆancias entre v´ertices. . . . . . . . . . . . . . . . . . . . 3
2 Depois da avalia¸c˜ao de todos os v´ertices finalizamos a constru¸c˜ao da tabela com
todas as distˆancias a partir da origem. Com base nesta tabela tamb´em podemos
construir a arborescˆencia de distˆancias. . . . . . . . . . . . . . . . . . . . . . . . . . 4
2
1 Algoritmo de Dijkstra.
Para verifica¸c˜ao dos resultados utilizando o algoritmo de Dijkstra, usamos primeiramente o
grafo observado abaixo. Informalmente, sem nenhuma criteriosidade ou formalidade matem´atica
Figura 1: Grafo utilizado para averiguar a efetividade da implementa¸c˜ao do Algoritmo de Dijkstra.
podemos descrever o Algoritmo de Dijkstra da seguinte maneira: procuramos o v´ertice mais pr´o-
ximo de A, depois, sucessivamente, procuramos entre os v´ertices n˜ao visitados aquele que tem a
menor distˆancia desde A, diretamente ou passando por algum v´ertice j´a visitado, anotando sem-
pre o percurso escolhido. Estamos considerando que nunca teremos distˆancias negativas, pois isso
atrapalharia o algoritmo, j´a que o mesmo n˜ao sabe lidar com distˆancias negativas(ele pode entrar
em looping). Come¸camos por construir uma tabela de distˆancias entre os v´ertices. Para os v´ertices
n˜ao ligados consideraremos a distˆancia como infinita. Para efeitos de implementa¸c˜ao a distˆancia
A B C D
A 0 12 2 ∞
B ∞ 0 ∞ ∞
C ∞ 5 0 2
D ∞ 1 ∞ 0
Tabela 1: Constru¸c˜ao da tabela de distˆancias entre v´ertices.
infinita foi representada pelo m´aximo n´umerico que poderia ser indexado pelo computador hospe-
deiro da aplica¸c˜ao/programa. Em C++ (linguagem utilizada para implementar o algoritmo) esse
m´aximo n´umerico ´e obtido atrav´es da biblioteca limits com o uso da classe numeric limits. Um
exemplo de uso dessas instru¸c˜oes ´e dado logo abaixo:
// Abaixo um exemplo de obten¸c~ao de limite n´umerico. Oten¸c~ao do maior inteiro
// com sinal que pode ser indexado, bem como o maior ponto flutuante de precis~ao
// dupla que pode ser representado na m´aquina hospedeira da aplica¸c~ao.
int maximo_int = numeric_limits<int>::max(); /*M´aximo inteiro*/
double maximo_dbl = numeric_limits<double>::max(); /*M´aximo ponto flutuante*/
Figura 2: Arborescˆencia de distˆancias obtida atrav´es da aplica¸c˜ao do Algoritmo de Dijkstra. Esta
arborescˆencia pode ser constru´ıda com base nos valores armazenados na tabela de distˆancias.
3
A B C D
Distˆancia 0 5 2 4
Anterior - D A C
Tabela 2: Depois da avalia¸c˜ao de todos os v´ertices finalizamos a constru¸c˜ao da tabela com todas as
distˆancias a partir da origem. Com base nesta tabela tamb´em podemos construir a arborescˆencia
de distˆancias.
2 Algoritmo de Bellmann-Ford.
Para verifica¸c˜ao dos resultados utilizando o algoritmo de Bellmann-Ford, usamos o mesmo
grafo com o qual averiguamos a capacidade do algoritmo de Dijkstra.
Figura 3: Grafo utilizado para averiguar a efetividade da implementa¸c˜ao do Algoritmo de
Bellmann-Ford. Ao final do processo obtivemos a mesma arborescˆencia de distˆancias.
Abaixo verificamos os passos utilizados para c´alculo das rotas a partir das informa¸c˜oes de
distˆancias entre os v´ertices.
(A, B) : dAB(∞) > dAA(0) + vAB(12) → dAB = 12 anterior(B) = A
(A, C) : dAC(∞) > dAA(0) + vAC(2) → dAC = 2 anterior(C) = A
(C, B) : dAB(12) > dAC(2) + vCB(5) → dAB = 7 anterior(B) = C
(C, D) : dAD(∞) > dAC(2) + vCD(2) → dAD = 4 anterior(D) = C
(D, B) : dAB(7) > dAD(4) + vDB(1) → dAB = 5 anterior(B) = D
Em uma segunda itera¸c˜ao n˜ao haver´a mudan¸cas nos valores das distˆancias c´alculadas atrav´es do
Algoritmo de Bellmann-Ford.
3 Algoritmos de Dijkstra e Bellmann-Ford.
Os algoritmos de Dijkstra e Bellmann-Ford foram implementados atrav´es da linguagem C++.
Os fontes com as respectivas classes e objetos de teste podem ser encontrados em anexo. As
funcionalidades das partes integrantes dos fontes podem ser facilmente entendidas, j´a que todas as
instru¸c˜oes foram exaustivamente documentadas. Para uma melhor compreens˜ao dos mecanismos
utilizados recomendamos a leitura dos livros Algorithms de Robert Sedgewick, The Algorithm
Design Manual de Steven S. Skiena, C++: The Complete Reference de Herbert Schildt, C++
by Dissection de Ira Pohl, The C++ Programming Language de Bjarne Stroustrup e finalmente
Effective C++ de Scott Meyers.
4 Sa´ıda Produzida Pela Aplica¸c˜ao.
A seguir ser´a exibida a sa´ıda produzida pela aplica¸c˜ao com base no exemplo dado anteriormente
(ver figura 1). Verifique a evolu¸c˜ao da tabela de distˆancias para a sa´ıda do algoritmo de Dijkstra
e o n´umero de itera¸c˜oes necess´arias, para que nesse exemplo, possamos chegar a um estado final.
4
Matriz de Adjac^encias:
[e11,0] [e12,1] [e13,1] [e14,0]
[e21,1] [e22,0] [e23,1] [e24,1]
[e31,1] [e32,1] [e33,0] [e34,1]
[e41,0] [e42,1] [e43,1] [e44,0]
Lista de V´ertices:
[A,0] [B,0] [C,0] [D,0]
Graus dos V´ertices:
[A,0] : 2
[B,0] : 3
[C,0] : 3
[D,0] : 2
Matriz de Dist^ancias:
0 12 2 2147483647
2147483647 0 2147483647 2147483647
2147483647 5 0 2
2147483647 1 2147483647 0
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][1.79769e+308] [1.79769e+308] [1.79769e+308] [1.79769e+308]
[Anterior] [ ] [ ] [ ] [ ]
Executando o Algoritmo de Dijkstra:
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [12] [2] [1.79769e+308]
[Anterior] [ ] [A] [A] [ ]
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [7] [2] [1.79769e+308]
[Anterior] [ ] [C] [A] [ ]
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [7] [2] [1.79769e+308]
[Anterior] [ ] [C] [A] [ ]
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [7] [2] [4]
[Anterior] [ ] [C] [A] [C]
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [7] [2] [4]
[Anterior] [ ] [C] [A] [C]
Tabela de Dist^ancias:
[A] [B] [C] [D]
5
[Dist^ancias][0] [5] [2] [4]
[Anterior] [ ] [D] [A] [C]
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [5] [2] [4]
[Anterior] [ ] [D] [A] [C]
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [5] [2] [4]
[Anterior] [ ] [D] [A] [C]
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [5] [2] [4]
[Anterior] [ ] [D] [A] [C]
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [5] [2] [4]
[Anterior] [ ] [D] [A] [C]
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [5] [2] [4]
[Anterior] [ ] [D] [A] [C]
Tabela de Dist^ancias:
[A] [B] [C] [D]
[Dist^ancias][0] [5] [2] [4]
[Anterior] [ ] [D] [A] [C]
6
Teoria dos Grafos - Exercícios do Capítulo 8
Michel Alves dos Santos ∗
Junho de 2011
Conteúdo
Lista de Figuras 1
1 Mostre que, se um grafo G não orientado for euleriano, seu conjunto de arestas
poderá ser particionado em ciclos disjuntos. 1
2 No Exemplo do item 8.4.2, execute o algoritmo de Dijkstra e verifique a cons-
trução da matriz de alocação, o resultado do algoritmo húngaro e os caminhos
apontados pelo vetor ‘Anterior’ acompanhando-os no grafo. 2
3 Construa uma sequência de De Brujin B(2,3). 2
4 Mostre que o gráfico de Petersen(figura 1) é não hamiltoniano. Explique por-
que as condições suficientes expostas no capítulo não se aplicam a ele.(Dica:
Aproveite a simetria do grafo). 2
5 Construa um algoritmo para achar um ciclo euleriano em um grafo euleriano
não orientado, a partir da construção progressiva de ciclos ao longo de um
percurso inicial. 3
6 Verifique se os grafos a seguir(figura 2) são hamiltonianos ou não-hamiltonianos,
justificando a resposta(Dica: Um deles é hamiltoniano e o outro não). 3
Lista de Figuras
1 Grafo de Petersen. Sua sequência gráfica é (3,3,3,3,3,3,3,3,3,3). . . . . . . . . . . . 2
2 Verificação de ciclos hamiltonianos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1 Mostre que, se um grafo G não orientado for euleriano,
seu conjunto de arestas poderá ser particionado em ciclos
disjuntos.
Seja G um grafo euleriano. O caso em que G não possui arestas é trivial. Sendo G conexo
e tendo pelo menos uma aresta, todo o seu vértice tem, pelo menos, grau 2. Portanto, pelo
Teorema de Euler, possui um ciclo C1. Retirando de G as arestas de C1 obtemos um subgrafo
∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi-
chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo-
nardo Viana Pereira.
1
gerador G1 cujos vértices têm ainda todos grau par. Se G1 não tem arestas, está terminada a
demonstração desta implicação. Caso contrário, G1 tem um ciclo C2 e a repetição do argumento
anterior conduz-nos a um grafo G2, subgrafo gerador de G1, cujos vértices têm grau par. Se G2 não
tem arestas terminamos, caso contrário repete-se o argumento. E continuamos com este raciocínio
sucessivamente até obtermos um grafo Gn totalmente desconexo (isto é, sem arestas). Aí teremos
uma partição das arestas de G em n ciclos.
2 No Exemplo do item 8.4.2, execute o algoritmo de Dijks-
tra e verifique a construção da matriz de alocação, o re-
sultado do algoritmo húngaro e os caminhos apontados
pelo vetor ‘Anterior’ acompanhando-os no grafo.
Para execução do algoritmo de Dijkstra a partir do vértice com rótulo ‘01’ teremos o seguinte
cenário:
[Vértice] [01] [02] [03] [04] [05] [06] [07] [08] [09] [10]
[Distâncias][0] [85] [inf] [460] [195] [220] [inf] [370] [285] [320]
[Anterior] [-] [01] [01] [08] [02] [02] [01] [09] [05] [05]
[Vértice] [11] [12] [13] [14] [15]
[Distâncias] [inf] [inf] [435] [inf] [inf]
[Anterior] [01] [01] [09] [01] [01]
Podemos observar que partindo do primeiro vértice encontraremos algumas regiões onde ocorrerão
‘loopings’, que podem ser chamados de caminhos de repetição. Note que nessa primeira iteração
tomando como origem o vértice ‘01’ não conseguiremos alcançar todos os vértices, por isso a
tabela de distâncias indicará distância infinita(inf). Outros caminhos de repetição, que poderam
ser notados no grafo fornecido, são: (02, 05, 09), (06, 03, 02, 05, 09), (08, 04), (15, 11) e (15, 11,
07, 08, 05, 10, 14).
3 Construa uma sequência de De Brujin B(2,3).
B(2,3): 11101000
4 Mostre que o gráfico de Petersen(figura 1) é não hamilto-
niano. Explique porque as condições suficientes expostas
no capítulo não se aplicam a ele.(Dica: Aproveite a sime-
tria do grafo).
Figura 1: Grafo de Petersen. Sua sequência gráfica é (3,3,3,3,3,3,3,3,3,3).
O grafo de Petersen é um tipo de grafo de Moore. Este grafo tem grande importância teórica,
por diversos motivos; em particular além de ser um grafo de Moore, ele tem cintura 5, é não
2
Hamiltoniano e não planar. O grafo de Petersen tem a pecualiaridade de ser contra exemplo para
numerosas conjecturas em diferentes temas da teoria dos grafos. Vale a pena registrar que o grafo
de Petersen é uma gaiola(grafo regular de cintura dada, com número mínimo de vértices). Uma
gaiola é denotada por seus parâmetros como c(d,g) (c = cage).
Porém a sequência de graus do grafo de Petersen não é forçosamente hamiltoniana. Um
sequência forçosamente hamiltoniana é aquela para qual todas as representações gráficas(conexas)
são grafos hamiltonianos. Uma sequência gráfica é uma sequência finita não descrescente, de
inteiros positivos, que tenha uma correspondência biunívoca com a sequência dos graus dos vértices
de um grafo não orientado G. G é então uma representação gráfica da sequência.
5 Construa um algoritmo para achar um ciclo euleriano em
um grafo euleriano não orientado, a partir da construção
progressiva de ciclos ao longo de um percurso inicial.
grau = 0;
soma = 0;
matrizAdjacencias[][];
N = NumeroDeLinhas(matrizAdjacencias[][]);
i = 0; //i é a linha atual
Enquanto ((soma <= 2) e ( i<= N))
{
grau = 0;
Para( j=0; j < N; j++) grau = grau + matrizAdjacencias[i][j];
Se (grau mod 2 == 1) soma ++; //caso seja ímpar
i++;
}
Se (soma > 2) Escreve ‘CAMINHO NÃO EXISTENTE’
Senão Escreve ‘CAMINHO EXISTENTE’
6 Verifique se os grafos a seguir(figura 2) são hamiltonianos
ou não-hamiltonianos, justificando a resposta(Dica: Um
deles é hamiltoniano e o outro não).
Figura 2: Verificação de ciclos hamiltonianos.
O primeiro grafo é hamiltoniano porque podemos passar uma única vez por cada vértice. Já
o segundo grafo, não é hamiltoniano porque não podemos encontrar um caminho hamiltoniano.
Sempre faz-se necessário passar mais de uma vez por um vértice.
3
Teoria dos Grafos - Exercícios do Capítulo 6
Michel Alves dos Santos ∗
Maio de 2011
Conteúdo
Lista de Figuras 1
1 O dono de uma loja de animais comprou certa quantidade de peixes ornamen-
tais de diversas espécies, um exemplar de cada espécie. Alguns desses peixes
não podem ficar no mesmo aquário. A compatibilidade entre as espécies está
retratada na tabela a seguir (1 significa que as espécies não devem ficar no
mesmo aquário): 1
Lista de Figuras
1 O dono de uma loja de animais comprou certa quantidade
de peixes ornamentais de diversas espécies, um exemplar
de cada espécie. Alguns desses peixes não podem ficar no
mesmo aquário. A compatibilidade entre as espécies está
retratada na tabela a seguir (1 significa que as espécies
não devem ficar no mesmo aquário):
A B C D E F G H I
A 0 0 0 0 0 1 1 0 1
B 0 0 1 0 0 0 0 1 0
C 0 1 0 0 1 0 0 1 0
D 0 0 0 0 1 1 0 1 0
E 0 0 1 1 0 0 1 0 0
F 1 0 0 1 0 0 1 0 1
G 1 0 0 0 1 1 0 1 1
H 0 1 1 1 0 0 1 0 0
I 1 0 0 0 0 1 1 0 0
Tabela 1: Construção da matriz que relaciona espécies não compatíveis.
a) Qual é o menor número de aquários necessários para abrigar todos os peixes?
∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi-
chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo-
nardo Viana Pereira.
1
b) É possível distribuir os peixes de forma que cada aquário tenha (aproximadamente) o mesmo
número de peixes?
• O menor número de aquários é dado pelo número cromático relativo, modelando o mesmo
como um grafo e fazendo com que as relações de incompatibilidade representassem as arestas.
Dessa forma teríamos que o número mínimo de aquários seria dado por: χ(P) ∆(P) + 1.
Sendo ∆(P) = 5, o grau do grafo P, logo precisariamos de no máximo 6 aquários.
• Sim. Com o seguinte agrupamento: {A, H}, {B, I}, {G,D,C} e {E, F}.
2
Teoria dos Grafos - Exercícios do Capítulo 5
Michel Alves dos Santos ∗
Maio de 2011
Conteúdo
Lista de Figuras 2
1 a) Qual o número de independência α(P) do grafo de Petersen, representado a
seguir? 2
1.1 Utilize o item (a) para apresentar um acoplamento maximal de P com 3 arestas. . 2
1.2 Use cadeias aumentantes para encontrar um acoplamento maximal de P com 4 arestas. 2
1.3 Encontre um acoplamento máximo de P. Qual o valor de α (P)? . . . . . . . . . . 3
2 Formule o problema de programação inteira que encontra o número de do-
minação do grafo a seguir. Mostre o funcionamento da formulação com os
subconjuntos de vértices {x1, x2, x3} e {x2, x3, x6}. 3
2.1 Testando para o subconjunto de vértices {x1, x2, x3}. . . . . . . . . . . . . . . . . 4
2.2 Testando para o subconjunto de vértices {x2, x3, x6}. . . . . . . . . . . . . . . . . 4
3 Formule o problema de programação inteira que encontra o número de aco-
plamento do grafo a seguir. Mostre o funcionamento da formulação com os
subconjuntos de arestas {x1x2, x3x6, x5x6} e {x1x2, x3x6, x4x5}. 5
3.1 Testando para o subconjunto de arestas {x1x2, x3x6, x5x6}. . . . . . . . . . . . . . 5
3.2 Testando para o subconjunto de arestas {x1x2, x3x6, x4x5}. . . . . . . . . . . . . . 6
4 Seja o grafo H=(V, E) não orientado, construído da seguinte forma (Veja
abaixo). Qual o maior conjunto independente deste grafo? 6
5 Uma cobertura de vértices é um subconjunto de vérices tal que toda aresta
é incidente a um vértice do conjunto. O número de cobertura de vértices de
um grafo G, notação β(G) é a cardinalidade da menor cobertura de vértices
de G. Formule o problema de programação inteira que encontra o número de
cobertura do grafo a seguir. Mostre o funcionamento da formulação com os
subconjuntos de vértices {x1, x2, x3} e {x2, x4, x6}. 6
5.1 Testando para o subconjunto de vértices {x1, x2, x3}. . . . . . . . . . . . . . . . . 7
5.2 Testando para o subconjunto de vértices {x2, x4, x6}. . . . . . . . . . . . . . . . . 8
6 Formule o problema de programação inteira que encontra o número de cober-
tura de arestas do grafo a seguir. Mostre o funcionamento da formulação com
os subconjuntos de arestas {ab, bc, bd} e {ab, cd, de}. 8
6.1 Testando para o subconjunto de arestas {ab, bc, bd}. . . . . . . . . . . . . . . . . 9
6.2 Testando para o subconjunto de arestas {ab, cd, de}. . . . . . . . . . . . . . . . . . 9
∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi-
chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo-
nardo Viana Pereira.
1
7 O problema das 8 damas consiste em se encontrar um posicionamento para
essas peças em um tabuleiro de xadrez, de tal forma que nenhuma dama ataque
outra. Diga a qual conceito, dentre os expostos neste capítulo, este problema
corresponde. Procure encontrar por inspeção, uma solução para este problema. 9
Lista de Figuras
1 O grafo de Petersen e o conjunto independente máximo em vermelho. . . . . . . . 2
2 O Grafo de Petersen. Acoplamento maximal com 3 arestas. . . . . . . . . . . . . . 2
3 O Grafo de Petersen. Acoplamento maximal com 4 arestas. . . . . . . . . . . . . . 3
4 O Grafo de Petersen. Acoplamento máximo com 5 arestas. . . . . . . . . . . . . . 3
5 Grafo fornecido para que se encontre o seu número de dominação. . . . . . . . . . 3
6 Grafo fornecido para que se encontre o seu número de acoplamento. . . . . . . . . 5
7 Grafo fornecido para que se encontre o seu número de cobertura de vértices. . . . . 6
8 Grafo fornecido para que se encontre o seu número de cobertura de arestas. . . . . 8
9 O Problema das 8 Damas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1 a) Qual o número de independência α(P) do grafo de Pe-
tersen, representado a seguir?
Figura 1: O grafo de Petersen e o conjunto independente máximo em vermelho.
O número α(P) do grafo apresentado é 4.
1.1 Utilize o item (a) para apresentar um acoplamento maximal de P
com 3 arestas.
As arestas pertencentes ao acoplamento maximal se encontram em vermelho. Este resultado
foi obtido por inspeção.
Figura 2: O Grafo de Petersen. Acoplamento maximal com 3 arestas.
1.2 Use cadeias aumentantes para encontrar um acoplamento maximal
de P com 4 arestas.
As arestas pertencentes ao acoplamento maximal se encontram em vermelho tracejado. Este
resultado foi obtido por inspeção.
2
Figura 3: O Grafo de Petersen. Acoplamento maximal com 4 arestas.
1.3 Encontre um acoplamento máximo de P. Qual o valor de α (P)?
As arestas pertencentes ao acoplamento máximo se encontram em vermelho tracejado. Este
resultado foi obtido por inspeção. O valor de α (P) é 5.
Figura 4: O Grafo de Petersen. Acoplamento máximo com 5 arestas.
2 Formule o problema de programação inteira que encon-
tra o número de dominação do grafo a seguir. Mostre
o funcionamento da formulação com os subconjuntos de
vértices {x1, x2, x3} e {x2, x3, x6}.
Figura 5: Grafo fornecido para que se encontre o seu número de dominação.
Começamos por tomar a matriz de incidência B do grafo fornecido. Em um passo seguinte
B =
X1X2 X1X4 X2X3 X2X5 X3X6 X4X5 X5X6
X1 1 1 0 0 0 0 0
X2 1 0 1 1 0 0 0
X3 0 0 1 0 1 0 0
X4 0 1 0 0 0 1 0
X5 0 0 0 1 0 1 1
X6 0 0 0 0 1 0 1
Tabela 1: Construção da matriz de incidência, que relaciona vértices e arestas.
encontramos sua transposta, visualizada logo abaixo: Tomamos agora um conjunto de vértices que
suspeitamos que faça parte de um conjunto dominante do grafo fornecido. Construímos um vetor
3
Bt
=
X1 X2 X3 X4 X5 X6
X1X2 1 1 0 0 0 0
X1X4 1 0 0 1 0 0
X2X3 0 1 1 0 0 0
X2X5 0 1 0 0 1 0
X3X6 0 0 1 0 0 1
X4X5 0 0 0 1 1 0
X5X6 0 0 0 0 1 1
Tabela 2: Construção da matriz de incidência transposta, que relaciona vértices e arestas.
característico, recebendo 1 se o vértice estiver no conjunto e 0 senão. Chamaremos esse vetor de
x. Se multiplicarmos Bt
por x, estaremos multiplicando a linha de cada aresta pelo vetor x. Se
os dois vértices que aparecem na linha da aresta coincidirem com dois elementos do nosso vetor, é
porque o nosso conjunto tem dois vértices adjacentes. Resumimos os nosso problema da seguinte
forma:
• Minimizar 1 · x
• Sujeito a Bt
· x 1
• xj ∈ {0, 1}
Onde nesse modelo o 1 representa o vetor formado por 1’s.
2.1 Testando para o subconjunto de vértices {x1, x2, x3}.
Tomaremos como vetor característico x = (1, 1, 1, 0, 0, 0) e agora procediremos com a multipli-
cação Bt
· x: 









1 1 0 0 0 0
1 0 0 1 0 0
0 1 1 0 0 0
0 1 0 0 1 0
0 0 1 0 0 1
0 0 0 1 1 0
0 0 0 0 1 1










∗








1
1
1
0
0
0








=










2
1
2
1
1
0
0










O valor 2 que aparece indica que na lista proposta existem vértices adjacentes, logo esse conjunto
não pode ser chamado de dominante.
2.2 Testando para o subconjunto de vértices {x2, x3, x6}.
Tomaremos como vetor característico x = (0, 1, 1, 0, 0, 1) e agora procediremos com a multipli-
cação Bt
· x: 









1 1 0 0 0 0
1 0 0 1 0 0
0 1 1 0 0 0
0 1 0 0 1 0
0 0 1 0 0 1
0 0 0 1 1 0
0 0 0 0 1 1










∗








0
1
1
0
0
1








=










1
0
2
1
2
0
1










O valor 2 que aparece indica que na lista proposta existem vértices adjacentes, logo esse conjunto
também não pode ser chamado de dominante.
4
3 Formule o problema de programação inteira que encon-
tra o número de acoplamento do grafo a seguir. Mostre
o funcionamento da formulação com os subconjuntos de
arestas {x1x2, x3x6, x5x6} e {x1x2, x3x6, x4x5}.
Figura 6: Grafo fornecido para que se encontre o seu número de acoplamento.
Começamos por tomar a matriz de incidência B do grafo fornecido. Tomamos agora um
B =
X1X2 X1X4 X2X3 X2X5 X3X6 X4X5 X5X6
X1 1 1 0 0 0 0 0
X2 1 0 1 1 0 0 0
X3 0 0 1 0 1 0 0
X4 0 1 0 0 0 1 0
X5 0 0 0 1 0 1 1
X6 0 0 0 0 1 0 1
Tabela 3: Construção da matriz de incidência, que relaciona vértices e arestas.
conjunto de arestas que suspeitamos que faça parte de um conjunto de acoplamento do grafo
fornecido. Construímos um vetor característico, recebendo 1 se a aresta estiver no conjunto e 0
senão. Chamaremos esse vetor de x. Se multiplicarmos B por x, estaremos multiplicando a linha
de cada vértice pelo vetor x. Se as arestas que aparecem na coluna da aresta coincidirem com os
elementos do nosso vetor, é porque o nosso conjunto tem arestas adjacentes. Resumimos os nosso
problema da seguinte forma:
• Maximizar 1 · x
• Sujeito a B · x 1
• xj ∈ {0, 1}
Onde nesse modelo o 1 representa o vetor formado por 1’s.
3.1 Testando para o subconjunto de arestas {x1x2, x3x6, x5x6}.
Tomaremos como vetor característico x = (1, 0, 0, 0, 1, 0, 1) e agora procediremos com a multi-
plicação B · x:








1 1 0 0 0 0 0
1 0 1 1 0 0 0
0 0 1 0 1 0 0
0 1 0 0 0 1 0
0 0 0 1 0 1 1
0 0 0 0 1 0 1








∗










1
0
0
0
1
0
1










=








1
1
1
0
1
2








O valor 2 que aparece indica que na lista proposta existem arestas adjacentes, logo esse conjunto
não pode ser dito como um conjunto de acoplamento.
5
3.2 Testando para o subconjunto de arestas {x1x2, x3x6, x4x5}.
Tomaremos como vetor característico x = (1, 0, 0, 0, 1, 1, 0) e agora procediremos com a multi-
plicação B · x:








1 1 0 0 0 0 0
1 0 1 1 0 0 0
0 0 1 0 1 0 0
0 1 0 0 0 1 0
0 0 0 1 0 1 1
0 0 0 0 1 0 1








∗










1
0
0
0
1
1
0










=








1
1
1
1
1
1








Como todos os valores são menores ou iguais a 1, isso significa que estamos diante de um conjunto
de acoplamento.
4 Seja o grafo H=(V, E) não orientado, construído da se-
guinte forma (Veja abaixo). Qual o maior conjunto inde-
pendente deste grafo?
• V = conjunto dos números naturais de 2 a 100.
• E = { (a,b) | a e b têm um divisor comum}
É o conjunto formado pelos números primos situados entre 2 e 100.
5 Uma cobertura de vértices é um subconjunto de vérices
tal que toda aresta é incidente a um vértice do conjunto.
O número de cobertura de vértices de um grafo G, nota-
ção β(G) é a cardinalidade da menor cobertura de vértices
de G. Formule o problema de programação inteira que en-
contra o número de cobertura do grafo a seguir. Mostre
o funcionamento da formulação com os subconjuntos de
vértices {x1, x2, x3} e {x2, x4, x6}.
Figura 7: Grafo fornecido para que se encontre o seu número de cobertura de vértices.
O problema é muito similar aos anteriores. Começamos por tomar a matriz de incidência B
do grafo fornecido. Em um passo seguinte encontramos sua transposta, visualizada logo abaixo:
Tomamos agora um conjunto de vértices que suspeitamos que faça parte de um conjunto de
cobertura do grafo fornecido. Construímos um vetor característico, recebendo 1 se o vértice estiver
no conjunto e 0 senão. Chamaremos esse vetor de x. Se multiplicarmos Bt
por x, estaremos
multiplicando a linha de cada aresta pelo vetor x. Se os dois vértices que aparecem na linha da
6
B =
X1X2 X1X4 X2X3 X2X5 X3X6 X4X5 X5X6
X1 1 1 0 0 0 0 0
X2 1 0 1 1 0 0 0
X3 0 0 1 0 1 0 0
X4 0 1 0 0 0 1 0
X5 0 0 0 1 0 1 1
X6 0 0 0 0 1 0 1
Tabela 4: Construção da matriz de incidência, que relaciona vértices e arestas.
Bt
=
X1 X2 X3 X4 X5 X6
X1X2 1 1 0 0 0 0
X1X4 1 0 0 1 0 0
X2X3 0 1 1 0 0 0
X2X5 0 1 0 0 1 0
X3X6 0 0 1 0 0 1
X4X5 0 0 0 1 1 0
X5X6 0 0 0 0 1 1
Tabela 5: Construção da matriz de incidência transposta, que relaciona vértices e arestas.
aresta coincidirem com dois elementos do nosso vetor, é porque o nosso conjunto tem dois vértices
adjacentes, e se isso ocorre a cobertura será prejudicada, ou seja, devemos ter um subconjunto
mínimo de vértices não adjacentes de tal forma que toda aresta seja incidente a um vértice desse
subconjunto. Mas observe que toda aresta deve ser incidente, logo o resultado da multiplicação
deve nos fornecer um vetor onde todas as suas componentes sejam maiores ou iguais a um, e isso
garantirá que todas as arestas estam presentes nessa relação. Resumimos os nosso problema da
seguinte forma:
• Minimizar 1 · x
• Sujeito a Bt
· x 1
• xj ∈ {0, 1}
Onde nesse modelo o 1 representa o vetor formado por 1’s.
5.1 Testando para o subconjunto de vértices {x1, x2, x3}.
Tomaremos como vetor característico x = (1, 1, 1, 0, 0, 0) e agora procediremos com a multipli-
cação Bt
· x: 









1 1 0 0 0 0
1 0 0 1 0 0
0 1 1 0 0 0
0 1 0 0 1 0
0 0 1 0 0 1
0 0 0 1 1 0
0 0 0 0 1 1










∗








1
1
1
0
0
0








=










2
1
2
1
1
0
0










O valor 2 que aparece indica que na lista proposta existem vértices adjacentes, e o 0 indica que
faltam arestas, logo esse conjunto não pode ser dito como de cobertura.
7
5.2 Testando para o subconjunto de vértices {x2, x4, x6}.
Tomaremos como vetor característico x = (0, 1, 0, 1, 0, 1) e agora procediremos com a multipli-
cação Bt
· x: 









1 1 0 0 0 0
1 0 0 1 0 0
0 1 1 0 0 0
0 1 0 0 1 0
0 0 1 0 0 1
0 0 0 1 1 0
0 0 0 0 1 1










∗








0
1
0
1
0
1








=










1
1
1
1
1
1
1










Como todos os valores são maiores ou iguais a 1, isso significa que estamos diante de um conjunto
de cobertura.
6 Formule o problema de programação inteira que encontra
o número de cobertura de arestas do grafo a seguir. Mos-
tre o funcionamento da formulação com os subconjuntos
de arestas {ab, bc, bd} e {ab, cd, de}.
Figura 8: Grafo fornecido para que se encontre o seu número de cobertura de arestas.
Começamos por tomar a matriz de incidência B do grafo fornecido. Tomamos agora um
B =
AB AD AE BC BD BE CD DE
A 1 1 1 0 0 0 0 0
B 1 0 0 1 1 1 0 0
C 0 0 0 1 0 0 1 0
D 0 1 0 0 1 0 1 1
E 0 0 1 0 0 1 0 1
Tabela 6: Construção da matriz de incidência, que relaciona vértices e arestas.
conjunto de arestas que suspeitamos que faça parte de um conjunto de cobertura de arestas do
grafo fornecido. Construímos um vetor característico, recebendo 1 se a aresta estiver no conjunto
e 0 senão. Chamaremos esse vetor de x. Se multiplicarmos B por x, estaremos multiplicando a
linha de cada vértice pelo vetor x. Se as arestas que aparecem na coluna da aresta coincidirem com
os elementos do nosso vetor, é porque o nosso conjunto tem arestas adjacentes. Porém o resultado
final da multiplicação deve nos fornecer um vetor no qual seus valores sejam maiores ou iguais a
1, com isso teremos certeza que todo vértice foi tocado por uma aresta do conjunto. Resumimos
os nosso problema da seguinte forma:
• Maximizar 1 · x
8
• Sujeito a B · x 1
• xj ∈ {0, 1}
Onde nesse modelo o 1 representa o vetor formado por 1’s.
6.1 Testando para o subconjunto de arestas {ab, bc, bd}.
Tomaremos como vetor característico x = (1, 0, 0, 1, 1, 0, 0, 0) e agora procediremos com a
multiplicação B · x:






1 1 1 0 0 0 0 0
1 0 0 1 1 1 0 0
0 0 0 1 0 0 1 0
0 1 0 0 1 0 1 1
0 0 1 0 0 1 0 1






∗












1
0
0
1
1
0
0
0












=






1
3
1
1
0






Nem todo vértice foi tocado, isso é concluído devido ao aparecimento do valor zero. O vértice E
não foi tocado.
6.2 Testando para o subconjunto de arestas {ab, cd, de}.
Tomaremos como vetor característico x = (1, 0, 0, 0, 0, 0, 1, 1) e agora procediremos com a
multiplicação B · x:






1 1 1 0 0 0 0 0
1 0 0 1 1 1 0 0
0 0 0 1 0 0 1 0
0 1 0 0 1 0 1 1
0 0 1 0 0 1 0 1






∗












1
0
0
0
0
0
1
1












=






1
1
1
2
1






Todos os vértices foram tocados, logo o subconjunto é uma cobertura de arestas.
7 O problema das 8 damas consiste em se encontrar um
posicionamento para essas peças em um tabuleiro de xa-
drez, de tal forma que nenhuma dama ataque outra. Diga
a qual conceito, dentre os expostos neste capítulo, este
problema corresponde. Procure encontrar por inspeção,
uma solução para este problema.
O problema se relaciona ao conceito de Conjuntos Dominantes. Por inspeção, uma solução
possível é a seguinte:
9
Figura 9: O Problema das 8 Damas.
10
Teoria dos Grafos - Exercícios do Capítulo 9
Michel Alves dos Santos ∗
Junho de 2011
Conteúdo
Lista de Figuras 1
1 Construa um grafo com a sequência de graus (4,4,3,3,3,3): (a) que seja planar,
(b) que não seja planar. 1
2 Um grafo é autodual se GD
é isomorfo a G. 2
3 Mostre que um grafo planar é bipartido se e só se GD
for euleriano. 2
4 A cintura de um grafo, notação g(G) é o comprimento do seu menor ciclo.
Mostre que em um grafo planar temos: m [(n − 2)g]/(g − 2) 2
5 (a) Seja G um grafo maximal planar com n > 4. Mostre que os vértices de grau
3, se existirem, formam um subconjunto independente dos vértices de G. (b)
Seja G um grafo maximal planar com 5 vértices. Quantas faces triangulares
tem G. (c) Seja G no item b. Produzimos um grafo G’, incluindo um vértice de
grau 3 em cada face triangular, como sugere a figura a seguir. Quantos vértices
tem G’? Quantos vértices de grau 3 tem G’? Mostre que G’ não é hamiltoniano.
(d) Adapte a construção mostrada acima e construa um grafo planar maximal
sem vértices de grau 3. 4
Lista de Figuras
1 A esquerda grafo planar, a direita grafo não planar. . . . . . . . . . . . . . . . . . . 2
2 Grafo planar maximal sem vértices de grau 3. . . . . . . . . . . . . . . . . . . . . . 4
1 Construa um grafo com a sequência de graus (4,4,3,3,3,3):
(a) que seja planar, (b) que não seja planar.
Ver figura 1.
∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi-
chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo-
nardo Viana Pereira.
1
Figura 1: A esquerda grafo planar, a direita grafo não planar.
2 Um grafo é autodual se GD
é isomorfo a G.
a) Mostre que se G é autodual então 2n = m + 2
b) Mostre que os grafos roda Rn são autoduais.
• a)
Se G é autodual, então GD
é isomorfo a G, pelo Teorema de Euler, temos que se um grafo
G é planar, então f − m + n = 2. Reformulando temos que o número de faces desse grafo é
f = m − n + 2. Analisando agora o grafo dual de G, GD
, pela definição de dualidade, possui
um vértice associado para cada face de G, logo o numero de vértices de GD
será igual ao
numero de faces de G, como pela hipótese os dois são isomorfos (então possuem o mesmo
número de arestas e vértices), se substituirmos f = n em f = m − n + 2, temos 2n = m + 2.
Provando o que queríamos.
• b)
Sabemos que o número de faces de uma Roda Rn será igual ao número de vértices, logo pela
definição de dualidade, o grafo GD
dual a roda, será também uma roda, pois ela possui o
número de faces de uma roda é o seu número de vértices. Dessa forma, o grafo dual da roda
é isomórfico à ela, mostrando então que qualquer roda é autodual.
3 Mostre que um grafo planar é bipartido se e só se GD
for
euleriano.
Se GD
é euleriano então ele só terá ciclos pares, cada ciclo par corresponde à uma face par em
um grafo planar. Se cada face é par no dual de G, então em G cada vértice terá grau par, o que
corresponde à todos os ciclos de G serem pares. Pelo teorema de grafo bipartido: um grafo G é
bipartido se e somente se não possuir ciclos impares. Como G possui apenas ciclos pares então ele
é bipartido.
4 A cintura de um grafo, notação g(G) é o comprimento do
seu menor ciclo. Mostre que em um grafo planar temos:
m [(n − 2)g]/(g − 2)
Para demonstrar tal propriedade devemos recorrer ao conceito de gêneros de superfícies e
grafos. O gênero de uma superfície é o número de alças e furos que ela possui; por exemplo, o
plano e a esfera têm gênero zero e o toro, gênero 1.
O gênero l(G) de um grafo é o da superfície de menor gênero que admita uma imersão de G.
Os grafos planares tem portanto gênero zero. A discussão sobre gênero de superfícies e de grafos
permite a generalização de diversos resultados de grafos planares para grafos quaisquer. Um desses
resultados é exibido a seguir:
Teorema 1. (Relação entre Cintura e Gênero) Se a cintura (comprimento do menor ciclo)
2
de um grafo G for g(G), então
l(G)
m
2
1 −
2
g(G)
−
n
2
+ 1
Executando as devidas transformações teremos:
l(G)
m
2
1 −
2
g(G)
−
n
2
+ 1
l(G)
m
2
g(G)
g(G)
−
2
g(G)
−
n
2
+ 1
l(G)
m
2
g(G) − 2
g(G)
−
n
2
+ 1
l(G)
m
2
g(G) − 2
g(G)
−
n
2
+
2
2
l(G)
m
2
g(G) − 2
g(G)
+
2 − n
2
l(G)
m
2
·
[g(G) − 2]
g(G)
+
2 − n
2
l(G)
m
2
·
[g(G) − 2]
g(G)
+
g(G)
g(G)
·
[2 − n]
2
l(G)
m · [g(G) − 2]
2 · g(G)
+
g(G) · [2 − n]
2 · g(G)
l(G)
m · [g(G) − 2] + g(G) · [2 − n]
2 · g(G)
l(G) · 2 · g(G) m · [g(G) − 2] + g(G) · [2 − n]
2 · l(G) · g(G) m · [g(G) − 2] + g(G) · [2 − n]
2 · l(G) · g(G) m · [g(G) − 2] − g(G) · [n − 2]
Como os grafos planares possuem gênero zero, logo:
2 · l(G) · g(G) m · [g(G) − 2] − g(G) · [n − 2]
2 · 0 · g(G) m · [g(G) − 2] − g(G) · [n − 2]
0 m · [g(G) − 2] − g(G) · [n − 2]
−m · [g(G) − 2] −g(G) · [n − 2]
−m · [g(G) − 2] −g(G) · [n − 2] × (−1)
m · [g(G) − 2] g(G) · [n − 2]
m (g(G) · [n − 2])/[g(G) − 2]
Executando as devidas substituições, que nesse caso seria apenas a troca de notação de g(G) por
apenas g, teremos finalmente:
m [(n − 2) · g]/(g − 2)
3
5 (a) Seja G um grafo maximal planar com n > 4. Mos-
tre que os vértices de grau 3, se existirem, formam um
subconjunto independente dos vértices de G. (b) Seja G
um grafo maximal planar com 5 vértices. Quantas faces
triangulares tem G. (c) Seja G no item b. Produzimos
um grafo G’, incluindo um vértice de grau 3 em cada face
triangular, como sugere a figura a seguir. Quantos vér-
tices tem G’? Quantos vértices de grau 3 tem G’? Mos-
tre que G’ não é hamiltoniano. (d) Adapte a construção
mostrada acima e construa um grafo planar maximal sem
vértices de grau 3.
a)
b) Para grafo planar maximal temos: m=3n-6, com n=5, temos m=9, aplicando o teorema de
euler temos f-m+n=2, substituindo m e n, temos f=6.
c) 11 vértices. 6 vértices de grau 3. Ao tentar construir um ciclo hamiltoniano, veremos que
sempre vai sobrar ao menos um vértice. Dessa forma, o grafo G’ é não hamiltoniano.
d) Solução deste quesito:
Figura 2: Grafo planar maximal sem vértices de grau 3.
4

Contenu connexe

Tendances

Apresentação para alunos do 5º ano sobre a história da matemática
Apresentação para alunos do 5º ano sobre a história da matemáticaApresentação para alunos do 5º ano sobre a história da matemática
Apresentação para alunos do 5º ano sobre a história da matemática
pedagogas2013
 
Tratamento da informacao
Tratamento da informacaoTratamento da informacao
Tratamento da informacao
João Alberto
 
Estatistica resumida
Estatistica resumidaEstatistica resumida
Estatistica resumida
Anderson Hoot
 
Plano cartesiano 7º ano
Plano cartesiano   7º anoPlano cartesiano   7º ano
Plano cartesiano 7º ano
Rafael Marques
 
Expressões com variáveis
Expressões com variáveisExpressões com variáveis
Expressões com variáveis
2301luisa
 
Atividade - Prova Brasil (9º ano)
Atividade  -  Prova Brasil (9º ano)Atividade  -  Prova Brasil (9º ano)
Atividade - Prova Brasil (9º ano)
Ilton Bruno
 

Tendances (20)

MATEMÁTICA | SEMANA | 32 3ª SÉRIE | REPRESENTAÇÃO ALGÉBRICA DE UMA FUNÇÃO DO ...
MATEMÁTICA | SEMANA | 32 3ª SÉRIE | REPRESENTAÇÃO ALGÉBRICA DE UMA FUNÇÃO DO ...MATEMÁTICA | SEMANA | 32 3ª SÉRIE | REPRESENTAÇÃO ALGÉBRICA DE UMA FUNÇÃO DO ...
MATEMÁTICA | SEMANA | 32 3ª SÉRIE | REPRESENTAÇÃO ALGÉBRICA DE UMA FUNÇÃO DO ...
 
Mdc e mmc - multiplos e divisores
Mdc e mmc - multiplos e divisoresMdc e mmc - multiplos e divisores
Mdc e mmc - multiplos e divisores
 
A matemática da cifra de vigenère
A matemática da cifra de vigenèreA matemática da cifra de vigenère
A matemática da cifra de vigenère
 
Apresentação para alunos do 5º ano sobre a história da matemática
Apresentação para alunos do 5º ano sobre a história da matemáticaApresentação para alunos do 5º ano sobre a história da matemática
Apresentação para alunos do 5º ano sobre a história da matemática
 
Tratamento da informacao
Tratamento da informacaoTratamento da informacao
Tratamento da informacao
 
Plano de Governo BOLSONARO 2022 .pdf
Plano de Governo BOLSONARO 2022 .pdfPlano de Governo BOLSONARO 2022 .pdf
Plano de Governo BOLSONARO 2022 .pdf
 
Numeros Inteiros
Numeros InteirosNumeros Inteiros
Numeros Inteiros
 
Estatistica resumida
Estatistica resumidaEstatistica resumida
Estatistica resumida
 
aulas_9º-Ano.ppt
aulas_9º-Ano.pptaulas_9º-Ano.ppt
aulas_9º-Ano.ppt
 
Eq. 2º grau
Eq. 2º grauEq. 2º grau
Eq. 2º grau
 
Fração SME 2013
Fração SME 2013Fração SME 2013
Fração SME 2013
 
Slides projeto raciocínio lógico
Slides projeto raciocínio lógicoSlides projeto raciocínio lógico
Slides projeto raciocínio lógico
 
(63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas
(63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas (63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas
(63 alíneas) Exercicios resolvidos sobre logaritmos e equações logaritmicas
 
Exercícios Resolvidos: Frequência relativa, absoluta, acumulada
Exercícios Resolvidos: Frequência relativa, absoluta, acumuladaExercícios Resolvidos: Frequência relativa, absoluta, acumulada
Exercícios Resolvidos: Frequência relativa, absoluta, acumulada
 
15 aula operacoes com conjuntos
15 aula   operacoes com conjuntos15 aula   operacoes com conjuntos
15 aula operacoes com conjuntos
 
Grupo de Estudos - Aula 1 - Porcentagem
Grupo de Estudos - Aula 1 - PorcentagemGrupo de Estudos - Aula 1 - Porcentagem
Grupo de Estudos - Aula 1 - Porcentagem
 
Plano cartesiano 7º ano
Plano cartesiano   7º anoPlano cartesiano   7º ano
Plano cartesiano 7º ano
 
Expressões com variáveis
Expressões com variáveisExpressões com variáveis
Expressões com variáveis
 
Uso das Novas Tecnologias da Informação e Comunicação no ensino a distância
Uso das Novas Tecnologias da Informação e Comunicação no ensino a distânciaUso das Novas Tecnologias da Informação e Comunicação no ensino a distância
Uso das Novas Tecnologias da Informação e Comunicação no ensino a distância
 
Atividade - Prova Brasil (9º ano)
Atividade  -  Prova Brasil (9º ano)Atividade  -  Prova Brasil (9º ano)
Atividade - Prova Brasil (9º ano)
 

En vedette

57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos
HAROLDO MIRANDA DA COSTA JR
 

En vedette (12)

Graph Theory - Exercises - Chapter 4
Graph Theory - Exercises - Chapter 4Graph Theory - Exercises - Chapter 4
Graph Theory - Exercises - Chapter 4
 
Graph Theory - Exercises - Chapter 5
Graph Theory - Exercises - Chapter 5Graph Theory - Exercises - Chapter 5
Graph Theory - Exercises - Chapter 5
 
Graph Theory - Exercises - Chapter 3 - Algorithms of Dijkstra and Bellman-Ford
Graph Theory - Exercises - Chapter 3 - Algorithms of Dijkstra and Bellman-FordGraph Theory - Exercises - Chapter 3 - Algorithms of Dijkstra and Bellman-Ford
Graph Theory - Exercises - Chapter 3 - Algorithms of Dijkstra and Bellman-Ford
 
Texture Synthesis: An Approach Based on GPU Use
Texture Synthesis: An Approach Based on GPU UseTexture Synthesis: An Approach Based on GPU Use
Texture Synthesis: An Approach Based on GPU Use
 
Graph Theory - Exercises - Chapter 6
Graph Theory - Exercises - Chapter 6Graph Theory - Exercises - Chapter 6
Graph Theory - Exercises - Chapter 6
 
Redes sociais - Teoria e Prática - Fundamentos
Redes sociais - Teoria e Prática - FundamentosRedes sociais - Teoria e Prática - Fundamentos
Redes sociais - Teoria e Prática - Fundamentos
 
Graph Theory - Exercises - Chapter 2
Graph Theory - Exercises - Chapter 2Graph Theory - Exercises - Chapter 2
Graph Theory - Exercises - Chapter 2
 
Graph Theory - Exercises - Chapter 4 - Part II
Graph Theory - Exercises - Chapter 4 - Part IIGraph Theory - Exercises - Chapter 4 - Part II
Graph Theory - Exercises - Chapter 4 - Part II
 
Teoria Dos Grafos (ColoraçãO De Mapas E O Teorema Das Quatro Cores)
Teoria Dos Grafos (ColoraçãO De Mapas E O Teorema Das Quatro Cores)Teoria Dos Grafos (ColoraçãO De Mapas E O Teorema Das Quatro Cores)
Teoria Dos Grafos (ColoraçãO De Mapas E O Teorema Das Quatro Cores)
 
Aula Grafos
Aula GrafosAula Grafos
Aula Grafos
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos
 
Teoria dos Grafos
Teoria dos GrafosTeoria dos Grafos
Teoria dos Grafos
 

Similaire à Graph Theory - Exercises - Chapters 2, 3, 4, 5, 6, 7, 8, and 9

Similaire à Graph Theory - Exercises - Chapters 2, 3, 4, 5, 6, 7, 8, and 9 (20)

Graph Theory - Exercises - Chapter 2 - Part II
Graph Theory - Exercises - Chapter 2 - Part IIGraph Theory - Exercises - Chapter 2 - Part II
Graph Theory - Exercises - Chapter 2 - Part II
 
Avaliação de Topologias de Redes Neurais Artificiais para Previsão do Consumo ...
Avaliação de Topologias de Redes Neurais Artificiais para Previsão do Consumo ...Avaliação de Topologias de Redes Neurais Artificiais para Previsão do Consumo ...
Avaliação de Topologias de Redes Neurais Artificiais para Previsão do Consumo ...
 
Analise real cassio neri
Analise real   cassio neriAnalise real   cassio neri
Analise real cassio neri
 
Apostila (notas de aula) Teoria de Controle Digital (ou Discreto no tempo)...
Apostila (notas de aula) Teoria de Controle Digital (ou Discreto no tempo)...Apostila (notas de aula) Teoria de Controle Digital (ou Discreto no tempo)...
Apostila (notas de aula) Teoria de Controle Digital (ou Discreto no tempo)...
 
Simulador Numérico Bidimensional para Escoamento Monofásico em Meios Porosos
Simulador Numérico Bidimensional para Escoamento Monofásico em Meios PorososSimulador Numérico Bidimensional para Escoamento Monofásico em Meios Porosos
Simulador Numérico Bidimensional para Escoamento Monofásico em Meios Porosos
 
Espaços metricos
Espaços metricosEspaços metricos
Espaços metricos
 
Apontamentos
ApontamentosApontamentos
Apontamentos
 
Algoritmos jabour
Algoritmos jabourAlgoritmos jabour
Algoritmos jabour
 
Apostila grafos
Apostila grafosApostila grafos
Apostila grafos
 
Calculo 2p
Calculo 2pCalculo 2p
Calculo 2p
 
Ap
ApAp
Ap
 
Aa booklet
Aa bookletAa booklet
Aa booklet
 
Dissertação muros de suporte
Dissertação muros de suporteDissertação muros de suporte
Dissertação muros de suporte
 
Apostila grafos
Apostila grafosApostila grafos
Apostila grafos
 
Teoria dos grafos
Teoria dos grafosTeoria dos grafos
Teoria dos grafos
 
Apostila sobre Controle Digital
Apostila sobre Controle DigitalApostila sobre Controle Digital
Apostila sobre Controle Digital
 
A conquista da matematica
A conquista da matematicaA conquista da matematica
A conquista da matematica
 
áLgebra linear
áLgebra linearáLgebra linear
áLgebra linear
 
Pascal
PascalPascal
Pascal
 
Guia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem PascalGuia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem Pascal
 

Plus de Michel Alves

Plus de Michel Alves (20)

Intelligent Transfer of Thematic Harmonic Color Palettes
Intelligent Transfer of Thematic Harmonic Color PalettesIntelligent Transfer of Thematic Harmonic Color Palettes
Intelligent Transfer of Thematic Harmonic Color Palettes
 
A Framework for Harmonic Color Measures
A Framework for Harmonic Color MeasuresA Framework for Harmonic Color Measures
A Framework for Harmonic Color Measures
 
Effectiveness of Image Quality Assessment Indexes
Effectiveness of Image Quality Assessment IndexesEffectiveness of Image Quality Assessment Indexes
Effectiveness of Image Quality Assessment Indexes
 
Introduction to Kernel Functions
Introduction to Kernel FunctionsIntroduction to Kernel Functions
Introduction to Kernel Functions
 
About Perception and Hue Histograms in HSV Space
About Perception and Hue Histograms in HSV SpaceAbout Perception and Hue Histograms in HSV Space
About Perception and Hue Histograms in HSV Space
 
Color Harmonization - Results
Color Harmonization - ResultsColor Harmonization - Results
Color Harmonization - Results
 
Wave Simulation Using Perlin Noise
Wave Simulation Using Perlin NoiseWave Simulation Using Perlin Noise
Wave Simulation Using Perlin Noise
 
Similarity Maps Using SSIM Index
Similarity Maps Using SSIM IndexSimilarity Maps Using SSIM Index
Similarity Maps Using SSIM Index
 
Qualifying Exam - Image-Based Reconstruction With Color Harmonization
Qualifying Exam - Image-Based Reconstruction With Color HarmonizationQualifying Exam - Image-Based Reconstruction With Color Harmonization
Qualifying Exam - Image-Based Reconstruction With Color Harmonization
 
TMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and ReportsTMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and Reports
 
Month Presentations Schedule - March/2015 - LCG/UFRJ
Month Presentations Schedule - March/2015 - LCG/UFRJMonth Presentations Schedule - March/2015 - LCG/UFRJ
Month Presentations Schedule - March/2015 - LCG/UFRJ
 
Color Palettes in R
Color Palettes in RColor Palettes in R
Color Palettes in R
 
Sigmoid Curve Erf
Sigmoid Curve ErfSigmoid Curve Erf
Sigmoid Curve Erf
 
Hue Wheel Prototype
Hue Wheel PrototypeHue Wheel Prototype
Hue Wheel Prototype
 
Cosine Curve
Cosine CurveCosine Curve
Cosine Curve
 
Triangle Mesh Plot
Triangle Mesh PlotTriangle Mesh Plot
Triangle Mesh Plot
 
Triangle Plot
Triangle PlotTriangle Plot
Triangle Plot
 
Capacity-Constrained Point Distributions :: Video Slides
Capacity-Constrained Point Distributions :: Video SlidesCapacity-Constrained Point Distributions :: Video Slides
Capacity-Constrained Point Distributions :: Video Slides
 
Capacity-Constrained Point Distributions :: Density Function Catalog
Capacity-Constrained Point Distributions :: Density Function CatalogCapacity-Constrained Point Distributions :: Density Function Catalog
Capacity-Constrained Point Distributions :: Density Function Catalog
 
Capacity-Constrained Point Distributions :: Complementary Results
Capacity-Constrained Point Distributions :: Complementary ResultsCapacity-Constrained Point Distributions :: Complementary Results
Capacity-Constrained Point Distributions :: Complementary Results
 

Dernier

SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
NarlaAquino
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
FabianeMartins35
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 

Dernier (20)

Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.ppt
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 

Graph Theory - Exercises - Chapters 2, 3, 4, 5, 6, 7, 8, and 9

  • 1. Lista de Exercícios - Teoria dos Grafos Exercícios do Capítulo 2 - Questões 1, 2, 3, 6 e 8 Michel Alves dos Santos ∗ Março de 2011 ∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi- chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo- nardo Viana Pereira. 1
  • 2. Conteúdo Lista de Figuras 2 1 Questão 1 3 1.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 d) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.5 e) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.6 f) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.7 g) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.8 h) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.9 i) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.10 j) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.11 k) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 Questão 2 5 2.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.4 d) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.5 e) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.6 f) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.7 g) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.8 h) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.9 i) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 Questão 3 7 3.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.3 c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.4 d) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.5 e) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.6 f) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4 Questão 6 9 5 Questão 8 10 5.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5.3 c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Lista de Figuras 1 Grafo apresentado para primeira questão. A primeira figura indica apenas as liga- ções entre os vértices, a segunda apresenta uma numeração para as arestas. . . . . 3 2 Grafo orientado fornecido para a segunda questão. . . . . . . . . . . . . . . . . . . 5 3 Grafo orientado fornecido para a segunda questão com arestas numeradas. . . . . . 7 4 Grafo fornecido para a terceira questão. . . . . . . . . . . . . . . . . . . . . . . . . 8 5 Exemplo de grafo para cálculo do grau. Primeiro Passo da Demonstração. . . . . . 9 2
  • 3. 6 Exemplo de grafo para cálculo do grau. Segundo Passo da Demonstração. . . . . . 9 7 Exemplo de grafos não isomorfos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1 Questão 1 Figura 1: Grafo apresentado para primeira questão. A primeira figura indica apenas as ligações entre os vértices, a segunda apresenta uma numeração para as arestas. 1.1 a) A seguir, duas condificações de duas soluções diferentes: • abcdebdae; • abcdaebde. 1.2 b) Vértice Vértice(s) adjacente(s) a b, d, e b a, c, d, e c b, d d a, b, c, e e a, b, d 1.3 c) a b c d e a 0 1 0 1 1 b 1 0 1 1 1 c 0 1 0 1 0 d 1 1 1 0 1 e 1 1 0 1 0 3
  • 4. 1.4 d) 1 2 3 4 5 6 7 8 a 1 1 1 0 0 0 0 0 b 1 0 0 0 1 1 0 0 c 0 0 0 1 0 0 1 0 d 0 1 0 0 1 0 0 1 e 0 0 1 0 0 1 0 1 1.5 e) Verificando se cbdeadeab é uma solução (sem usar o desenho). Usando a lista de adjacência temos os seguintes passos: c → d d → b b → e e → a d → e e → a O passo em destaque já foi um passo realizado antes, isso que dizer que uma aresta foi repetida, portanto essa codificação não é uma solução para o problema tratado. Acho também que um computador, convenientente programado, poderia realizar esta verifica- ção. Basta apenas criar um algoritmo onde para cada percurso, o mesmo deve ser armazenado e verificado para cada outro percurso realizado, ou seja, deve-se ter uma implementação de um percurso simples. 1.6 f) A solução abcdeadbe pode ser codificada como 14783256. Eu codificaria a solução numérica, pois como a mesma faz referência as arestas, fica mais fácil identificar se uma codificação dada é válida para esse problema, basta verificar se existe um número repetido na sequência. A seguir as codificações das sequências do item (e): adcbedbae → 27468513 eabdebcda → 31586472 cbdeadeab → 75632831 4
  • 5. 1.7 g) • 12345678 não é solução, pois não é possível sair diretamente da aresta 2 para 3; • 12345687 também não é solução pelo mesmo motivo do item anterior; • 35742861 também não é solução pelo mesmo motivo do item anterior. Usando a lista de incidência e procurando por outros vértices que também incidam na mesma aresta e que possuam uma ligação para a próxima aresta da sequência fornecida. 1.8 h) É possível formar 88 = 16.777.216 sequências. 1.9 i) Um computador que examinasse 1.000.000 sequências por segundo, levaria pelo menos Tempo = 88 1.000.000 = 16.777.216 1.000.000 = 16, 777216 ou seja, 16.777.216seq 106seq/s = 16, 777216s, para descobrir todas as soluções. 1.10 j) Para um grafo com 20 arestas, seria possível formar o seguinte número de sequências: 2020 = 104.857.600.000.000.000.000.000.000 1.11 k) Um computador que examinasse 1.000.000 seq/s, levaria pelo menos: Tempo = 202 0 1.000.000 = 104.857.600.000.000.000.000.000.000 1.000.000 = 104.857.600.000.000.000.000s 2 Questão 2 Figura 2: Grafo orientado fornecido para a segunda questão. 5
  • 6. 2.1 a) A seguir, duas condificações de duas soluções diferentes: • acbcdabd; • abcbdacd. 2.2 b) Vértice Vértice(s) adjacente(s) a b, c b c, d c b, d d a 2.3 c) a b c d a 0 1 1 0 b 0 0 1 1 c 0 1 0 1 d 1 0 0 0 2.4 d) 1 2 3 4 5 6 7 a 1 1 0 0 0 0 -1 b -1 0 1 1 -1 0 0 c 0 -1 -1 0 1 1 0 d 0 0 0 -1 0 -1 1 2.5 e) Verificando se acdabcbd é uma solução (sem usar o desenho). Usando a lista de adjacência temos os seguintes passos: a → c c → d d → a a → b b → c c → b b → d Logo, todas as arestas foram percorridas, e não houve repetições, logo a sequência acdabcbd é uma solução. Verificando se abdacbda é uma solução (sem usar o desenho). Usando a lista de adjacência temos os seguintes passos: a → b b → d d → a a → c c → b b → d O passo em destaque já foi um passo realizado antes, isso quer dizer que uma aresta foi repetida, portanto essa codificação não é uma solução para o problema tratado. 6
  • 7. 2.6 f) Figura 3: Grafo orientado fornecido para a segunda questão com arestas numeradas. Através da figura podemos observar que a sequência 1354726 é uma solução válida. A seguir as codificações das sequências do item (e): acdabcbd → 2671354 abdacbda → 1472547 2.7 g) • 1234567 não é solução, pois não é possível sair diretamente da aresta 1 para 2; • 1234567 não é solução pelo mesmo motivo do item anterior; • 3574261 não é solução, pois não é possível sair diretamente da aresta 5 para 7. 2.8 h) É possível formar 77 = 823.543 sequências. 2.9 i) Um computador que examinasse 1.000.000 seq/s, levaria pelo menos 823.543seq 106seq/s = 0.823543s, para descobrir todas as soluções. 3 Questão 3 3.1 a) Logo abaixo a lista de adjacência do grafo da figura acima: Vértice Vértice(s) adjacente(s) A B, C B A, C, D C A, B, D D B, C 7
  • 8. Figura 4: Grafo fornecido para a terceira questão. 3.2 b) Logo abaixo a matriz de adjacência: A = A B C D A 0 1 1 0 B 1 0 1 1 C 1 1 0 1 D 0 1 1 0 3.3 c) B = 1 2 3 4 5 A 1 1 0 0 0 B 1 0 1 1 0 C 0 1 1 0 1 D 0 0 0 1 1 3.4 d) Calculando o produto A2 :     0 1 1 0 1 0 1 1 1 1 0 1 0 1 1 0     ∗     0 1 1 0 1 0 1 1 1 1 0 1 0 1 1 0     =     2 1 1 2 1 3 2 1 1 2 3 1 2 1 1 2     O tamanho (comprimento) de um caminho é o número de arestas do mesmo, ou seja, número de vértices menos um. Quantos caminhos distintos de tamanho n existem conectando dois vértices de um dado grafo G? Este valor pode ser computado multiplicando a matriz de adjancência do grafo G por ela mesma n vezes. Se A é a matriz de adjacência de um grafo G, a entrada aij da matriz A2 indica a quantidade de caminhos de tamanho 2 conectando vi a vj no grafo G. Este resultado é válido para caminhos de tamanho n calculando An . Logo os números na diagonal significam o número de caminhos de tamanho 2 que existem de um vértice para ele mesmo. 3.5 e) Calculando o produto B · Bt :     1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 0 0 1 1     ∗       1 1 0 0 1 0 1 0 0 1 1 0 0 1 0 1 0 0 1 1       =     2 1 1 0 1 3 1 1 1 1 3 1 0 1 1 2     8
  • 9. Os valores da diagonal principal represetam o número de conexões ou caminhos que o respectivo vértice possui a partir dele. Fora da diagonal o número de conexões que o respectivo vértice possui com os demais. 3.6 f) Calculando o produto Bt · B:       1 1 0 0 1 0 1 0 0 1 1 0 0 1 0 1 0 0 1 1       ∗     1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 0 0 1 1     =       2 1 1 1 0 1 2 1 0 1 1 1 2 1 1 1 0 1 2 1 0 1 1 1 2       4 Questão 6 Se para cada ligação entre vértices inserimos/aumentamos um grau para cada vértice partici- pante da ligação então, teremos para o seguinte grafo visto abaixo um número de vértices |V | = 2 e número de arestas |E| = 1. Figura 5: Exemplo de grafo para cálculo do grau. Primeiro Passo da Demonstração. Para o próximo grafo teríamos o mesmo, um número de vértices |V | = 3 e número de arestas |E| = 2 Figura 6: Exemplo de grafo para cálculo do grau. Segundo Passo da Demonstração. E por indução nós podemos contruir uma forma de chegar até v∈V d(v) = 2m Onde d(v) é a função que retorna o grau de um determinado vértice v ∈ V , V o conjunto de vértices do grafo e m o número de arestas. Observando a matriz de incidência notamos que cada linha determina o grau de um vértice. Como para cada aresta aparecem dois 1s na matriz de incidência, a soma de todos os graus equivale a contar duas vezes cada aresta. Uma outra observação interessante é que o número de vértices de grau impar em um grafo orientado sempre é par: Nv(d(v)impar) = 2k Sendo Nv a função que classifica e retorna o número de vértices que possuem grau ímpar, e esse número sempre será da forma 2k. Como a soma dos graus de todos os vértices é um número par (2n) é impossível que só um tenha grau ímpar. Os dois fatos relacionados nessa questão a priori podem parecer coincidência mas são fortes consequências de leis encontradas na Álgebra Linear. Não faremos uso dessas ferramentas de caráter mais avançado, iremos apenas formalizar esses 9
  • 10. fatos de maneira bem simples. Para isso denotaremos um grafo pela letra G e representaremos por V (G) e A(G) respectivamente, os conjuntos de vértices e das arestas de G. Teorema 1 (Relação Entre a Soma dos Graus e a Quantidade de Arestas). Para todo grafo G v∈V (G) d(v) = 2 · m Isto é: “A soma dos graus dos vértices de um grafo é sempre o dobro do número de arestas.” Demonstração. Quando contamos os graus dos vértices estamos contando as extremidades das arestas uma vez. Como cada aresta tem duas extremidades, no processo de contagem cada aresta foi computada duas vezes. Corolário 1 (Ou Lema do Aperto de Mãos). Todo grafo G possui um número par de vértices de grau ímpar. Nv(d(v)impar) = 2k Demonstração. Se tivéssemos um número ímpar de vértices de grau ímpar a soma dos graus seria ímpar. Mas a soma dos graus é o dobro do número de arestas e, portanto é um número par. 5 Questão 8 5.1 a) Suponha que exista um grafo G bipartido. Se G não contém ciclos, então não há o que provar. Suponha que G tem um ciclo Cn = v0v1, v1v2, ..., vs−1vs. Supondo que v0 ∈ V1, então v1 ∈ V1, v2 ∈ V1, etc. Ou seja, vi ∈ V1 se e somente se i é par. Como v0 = vs, s deve ser par. Desta forma, utilizamos um número par de arestas. 5.2 b) Sim. Seja v0 ∈ V (G). Vamos separar os vértices de G em dois subconjuntos V1 e V2 de tal modo que v0 ∈ V2 e v ∈ V1 se e somente se existe um caminho de comprimento ímpar de v0 a v. Então V1 e V2 são disjuntos. De fato, suponha que exista w ∈ V1 ∩ V2. Podemos supor que w é o vétice “mais próximo” de v0 tal que isso acontece. Então existiria um caminho C1 de comprimento par de v0 a w e um caminho C2 de v0 a w de comprimento ímpar, que não se cruzam. Então C1 ∪ C2 seria um ciclo de comprimento ímpar, o que por absurdo não é válido. 5.3 c) Observa-se na figura abaixo que no grafo G1 existe um ciclo fechado ímpar no vértice A. Já no grafo G2, todo ciclo fechado em A é par. Figura 7: Exemplo de grafos não isomorfos. 10
  • 11. Teoria dos Grafos - Exercícios do Capítulo 3 Questões 1, 2 e 5 Michel Alves dos Santos ∗ Abril de 2011 ∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi- chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo- nardo Viana Pereira. 1
  • 12. Conteúdo Lista de Figuras 3 Lista de Tabelas 3 1 Questão 1. Execute o algoritmo de Dijkstra com o exemplo do item 3.2, tro- cando antes o sinal do custo do arco (E,B). 4 2 Questão 2. Considere os dois grafos utilizados nos algoritmos de Dijkstra e Bellman-Ford. 5 2.1 Aplique o algoritmo de Dijkstra, acompanhando a formalização, aos dois grafos, use os vértices A, no primeiro, e 1, no segundo, como origem. . . . . . . . . . . . . . . 5 2.1.1 Para o primeiro grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.2 Para o segundo grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Aplique o algoritmo de Bellmann-Ford aos dois grafos (mesma observação). . . . . 9 2.2.1 Para o primeiro grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2.2 Para o segundo grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3 No segundo grafo, mude o valor do arco(3,5) para -2 e aplique os dois algoritmos. Observe os resultados obtidos e interprete. . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.1 Dijkstra: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.2 Bellmann-Ford: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3 Questão 5. Utilizando o grafo a seguir, aplique o algoritmo de Dijkstra para achar a menor distância do vértice A aos outros vértices e construa a arbores- cência de distâncias a partir de A. 12 2
  • 13. Lista de Figuras 1 Primeira Questão. Distâncias em quilômetros entre as cidades de uma certa região. 4 2 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 5 3 Grafos fornecidos para a questão de número 2. . . . . . . . . . . . . . . . . . . . . 5 4 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 7 5 Arborescência de distâncias a partir do vértice (1). . . . . . . . . . . . . . . . . . . 9 6 Grafo com o valor do arco (3,5) invertido. . . . . . . . . . . . . . . . . . . . . . . . 10 7 Grafo fornecido para a questão de número 5. . . . . . . . . . . . . . . . . . . . . . 12 8 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 13 Lista de Tabelas 1 1o Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo “Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Ante- rior” indica o vértice anterior pelo qual o caminho está sendo contruído. . . . . . . 4 2 2o Passo. Fechando o vértice C pois não existe menor distância. . . . . . . . . . . . 4 3 3o Passo. Fechando o vértice D pois não existe menor distância. . . . . . . . . . . . 4 4 4o Passo. Fechando o vértice E pois não existe menor distância. . . . . . . . . . . . 4 5 5o Passo. Fechando o vértice F pois não existe menor distância. . . . . . . . . . . . 4 6 Passo Final. Fechando o vértice B* pois não existe menor distância. Todos os vértices foram avaliados, com isso construímos a tabela com as distâncias. . . . . . 5 7 1o Passo. Construindo a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 5 8 2o Passo. Inicializando a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 6 9 3o Passo. Passando pelo vértice C. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 10 4o Passo. Passando pelo vértice D. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 11 5o Passo. Passando pelo vértice E. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 12 6o Passo. Passando pelo vértice B. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 13 Passo Final. Obtenção de todas as distâncias a partir do vértice A. . . . . . . . . . 7 14 1o Passo. Construindo a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 8 15 2o Passo. Inicializando a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 8 16 3o Passo. Passando pelo vértice (2). . . . . . . . . . . . . . . . . . . . . . . . . . . 8 17 4o Passo. Passando pelo vértice (3). . . . . . . . . . . . . . . . . . . . . . . . . . . 8 18 5o Passo. Passando pelo vértice (4). . . . . . . . . . . . . . . . . . . . . . . . . . . 9 19 6o Passo. Passando pelo vértice (5). . . . . . . . . . . . . . . . . . . . . . . . . . . 9 20 Passo Final. Obtenção de todas as distâncias a partir do vértice (1). . . . . . . . . 9 21 1o Passo. Iniciando tabela com distâncias a partir do vértice (1). Usando o valor 1000 para representar infinito. Fechando o vértice (1), pois é nosso vértice de partida. 10 22 2o Passo. Obtendo as rotas para os vértices (2) e (5) apartir do vértice (1). . . . . 11 23 3o Passo. Obtendo as rotas para os vértices (3) e (4) apartir do vértice (2). . . . . 11 24 4o Passo. Obtendo as rotas para os vértices (4) e (5) apartir do vértice (3). . . . . 11 25 5o Passo. Obtendo rota para o vértice (1) apartir do vértice (4). Observe que o vértice (1) já se encontra fechado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 26 6o Passo. Obtendo rota para o vértice (1) e (4) apartir do vértice (5). . . . . . . . 11 27 Tabela com todas as distâncias a partir do vértice (1). Houve uma redução nas distâncias devido ao caminho com valor negativo. . . . . . . . . . . . . . . . . . . . 11 28 1o Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo “Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Ante- rior” indica o vértice anterior pelo qual o caminho está sendo contruído. . . . . . . 12 29 Último Passo. Construção da tabela com as distâncias a partir do vértice A. . . . . 12 3
  • 14. 1 Questão 1. Execute o algoritmo de Dijkstra com o exem- plo do item 3.2, trocando antes o sinal do custo do arco (E,B). Figura 1: Primeira Questão. Distâncias em quilômetros entre as cidades de uma certa região. A* B C D E F Distância 0 ∞ ∞ ∞ ∞ ∞ Anterior - - - - - - Tabela 1: 1o Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo “Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Anterior” indica o vértice anterior pelo qual o caminho está sendo contruído. A* B C* D E F Distância 0 12 4 ∞ ∞ ∞ Anterior - A A - - - Tabela 2: 2o Passo. Fechando o vértice C pois não existe menor distância. A* B C* D* E F Distância 0 12 4 6 ∞ 12 Anterior - A A C - D Tabela 3: 3o Passo. Fechando o vértice D pois não existe menor distância. A* B C* D* E* F Distância 0 12 4 6 6 12 Anterior - A A C C E Tabela 4: 4o Passo. Fechando o vértice E pois não existe menor distância. A* B C* D* E* F* Distância 0 12 4 6 6 12 Anterior - A A C C E Tabela 5: 5o Passo. Fechando o vértice F pois não existe menor distância. 4
  • 15. A* B* C* D* E* F* Distância 0 12 4 6 6 12 Anterior - A A C C E Tabela 6: Passo Final. Fechando o vértice B* pois não existe menor distância. Todos os vértices foram avaliados, com isso construímos a tabela com as distâncias. Figura 2: Arborescência de distâncias a partir do vértice A. 2 Questão 2. Considere os dois grafos utilizados nos algo- ritmos de Dijkstra e Bellman-Ford. Figura 3: Grafos fornecidos para a questão de número 2. 2.1 Aplique o algoritmo de Dijkstra, acompanhando a formalização, aos dois grafos, use os vértices A, no primeiro, e 1, no segundo, como origem. 2.1.1 Para o primeiro grafo teremos: Procuramos a cidade mais próxima de A. Depois, sucessivamente, procuramos entre as cidades não visitadas aquela que tem a menor distância desde A, diretamente ou passando por alguma cidade já visitada, anotando sempre o percurso escolhido. Estamos considerando que nunca te- remos distâncias negativas, pois isso atrapalharia o algoritmo, já que o mesmo não sabe lidar com distâncias negativas(ele pode entrar em looping). Começamos por construir uma tabela de distâncias entre os vértices. Para os vértices não ligados consideraremos a distância como infinita. Para os próximos passos usaremos o número 1000 para representar a distância infinita (∞) que A* B C D E F A 0 12 4 ∞ ∞ ∞ B ∞ 0 6 6 ∞ ∞ C ∞ 10 0 ∞ 2 ∞ D ∞ ∞ 8 0 ∞ 6 E ∞ 2 ∞ ∞ 0 6 F ∞ ∞ ∞ ∞ ∞ 0 Tabela 7: 1o Passo. Construindo a tabela de distâncias. foi colocada na tabela de distâncias para representar a falta de ligação entre os vértices. 5
  • 16. Inicialização: A distância de A para todos os outros vértices é marcada como infinita(nesse caso 1000), exceto para o próprio A(distância 0). Marcamos A como fechado, usando um asterisco, e o vértice anterior fica vazio porque A é o nosso vértice de partida. A* B C D E F Distância 0 ∞ ∞ ∞ ∞ ∞ Anterior - - - - - - Tabela 8: 2o Passo. Inicializando a tabela de distâncias. • 2o Passo: Que cidades posso alcançar a partir de A e qual é a distância entre elas? • Resposta: B, distância = 12 (mudamos para 12 pois: 12 < 1000 ) • Resposta: C, distância = 4 (mudamos para 4 pois: 4 < 1000 ) O vértice C será fechado pois sua distância não pode ser melhorada e será o nosso próximo ponto de partida. A* B C* D E F Distância 0 12 4 ∞ ∞ ∞ Anterior A A A - - - Tabela 9: 3o Passo. Passando pelo vértice C. • 3o Passo: Que cidades posso alcançar a partir de C e qual é a distância entre elas? • Resposta: B, distância = 14 (não mudamos para 14 pois: 12 < 14 ) • Resposta: D, distância = 6 (mudamos para 6 pois: 6 < 1000 ) • Resposta: E, distância = 6 (mudamos para 6 pois: 6 < 1000 ) O vértice D será fechado pois sua distância não pode ser melhorada e será o nosso próximo ponto de partida. A* B C* D* E F Distância 0 12 4 6 6 ∞ Anterior A A A C C - Tabela 10: 4o Passo. Passando pelo vértice D. • 4o Passo: Que cidades posso alcançar a partir de D e qual é a distância entre elas? • Resposta: C, distância = 14 (não mudamos para 14 pois: 4 < 14 ) • Resposta: F, distância = 12 (mudamos para 12 pois: 12 < 1000 ) Por enquanto nenhum vértice será fechado mas as distâncias computadas que estavam dentro do padrão de minimalidade serão atualizadas na tabela. Próximo ponto de partida será o vértice E. • 5o Passo: Que cidades posso alcançar a partir de E e qual é a distância entre elas? • Resposta: B, distância = 8 (mudamos para 8 pois: 8 < 12) • Resposta: F, distância = 12 (mudamos para 12 pois: 12 <= 12) 6
  • 17. A* B C* D* E F Distância 0 12 4 6 6 12 Anterior A A A C C D Tabela 11: 5o Passo. Passando pelo vértice E. A* B C* D* E* F Distância 0 8 4 6 6 12 Anterior A E A C C E Tabela 12: 6o Passo. Passando pelo vértice B. O vértice E será fechado pois sua distância não pode ser melhorada e B será o nosso próximo ponto de partida. • 6o Passo: Que cidades posso alcançar a partir de B e qual é a distância entre elas? • Resposta: C, distância = 14 (não mudamos para 14 pois: 4 < 14) • Resposta: D, distância = 14 (não mudamos para 14 pois: 6 < 14) Porém vale observar que o vértice C já foi fechado e o vértice D também, logo o vértice B se- ráfechado pois não existe menor distância para alcançá-lo. Além disso chegamos ao final das verificações, logo o vértice F também será fechado e com isso teremos: A* B* C* D* E* F* Distância 0 8 4 6 6 12 Anterior A E A C C E Tabela 13: Passo Final. Obtenção de todas as distâncias a partir do vértice A. Figura 4: Arborescência de distâncias a partir do vértice A. 2.1.2 Para o segundo grafo teremos: Começamos por construir uma tabela de distâncias entre os vértices. Para os vértices não ligados consideraremos a distância como infinita (∞). Para os próximos passos usaremos o número 1000 para representar a distância infinita (∞) que foi colocada na tabela de distâncias para representar a falta de ligação entre os vértices. Inicialização: A distância de (1) para todos os outros vértices é marcada como infinita(nesse caso 1000), exceto para o próprio (1)(distância 0). Marcamos (1) como fechado, usando um asterisco, e o vértice anterior fica vazio porque (1) é o nosso vértice de partida. • 2o Passo: Que vértices posso alcançar a partir de (1) e qual é a distância entre eles? • Resposta: (2), distância = 1 (mudamos para 1 pois: 1 < 1000 ) 7
  • 18. (1) (2) (3) (4) (5) (1) 0 1 ∞ ∞ 1 (2) ∞ 0 1 2 ∞ (3) ∞ ∞ 0 4 2 (4) 3 ∞ ∞ 0 ∞ (5) 2 ∞ ∞ 1 0 Tabela 14: 1o Passo. Construindo a tabela de distâncias. (1)* (2) (3) (4) (5) Distância 0 ∞ ∞ ∞ ∞ Anterior - - - - - Tabela 15: 2o Passo. Inicializando a tabela de distâncias. • Resposta: (5), distância = 1 (mudamos para 1 pois: 1 < 1000 ) O vértice (2) será fechado pois sua distância não pode ser melhorada e será o nosso próximo ponto de partida. (1)* (2)* (3) (4) (5) Distância 0 1 ∞ ∞ 1 Anterior - (1) - - (1) Tabela 16: 3o Passo. Passando pelo vértice (2). • 3o Passo: Que vértices posso alcançar a partir de (2) e qual é a distância entre eles? • Resposta: (3), distância = 2 (mudamos para 2 pois: 2 < 1000 ) • Resposta: (4), distância = 3 (mudamos para 3 pois: 3 < 1000 ) O vértice (3) será fechado pois sua distância não pode ser melhorada e será o nosso próximo ponto de partida. (1)* (2)* (3)* (4) (5) Distância 0 1 2 3 1 Anterior - (1) (2) (2) (1) Tabela 17: 4o Passo. Passando pelo vértice (3). • 4o Passo: Que vértices posso alcançar a partir de (3) e qual é a distância entre eles? • Resposta: (4), distância = 6 (não mudamos para 6 pois: 3 < 6 ) • Resposta: (5), distância = 4 (não mudamos para 4 pois: 1 < 4 ) O vértice (4) não será fechado pois ainda não averiguamos se a distância pode ser melhorada e será o nosso próximo ponto de partida. • 4o Passo: Que vértices posso alcançar a partir de (4) e qual é a distância entre eles? • Resposta: (1), distância = 6 (não mudamos para 6 pois: 0 < 6 ) 8
  • 19. (1)* (2)* (3)* (4) (5) Distância 0 1 2 3 1 Anterior - (1) (2) (2) (1) Tabela 18: 5o Passo. Passando pelo vértice (4). (1)* (2)* (3)* (4) (5) Distância 0 1 2 3 1 Anterior - (1) (2) (2) (1) Tabela 19: 6o Passo. Passando pelo vértice (5). O vértice (4) não será fechado pois ainda não averiguamos se a distância pode ser melhorada e o vértice (5) será o nosso próximo ponto de partida. Observe que o vértice (1) já estava fechado. • Passo Final: Que vértices posso alcançar a partir de (5) e qual é a distância entre eles? • Resposta: (1), distância = 3 (não mudamos para 3 pois: 0 < 3 ) • Resposta: (4), distância = 2 (mudamos para 2 pois: 2 < 3 ) O vértice (4) será fechado pois a distância não pode ser melhorada e o vértice (5) também será. (1)* (2)* (3)* (4)* (5)* Distância 0 1 2 2 1 Anterior - (1) (2) (5) (1) Tabela 20: Passo Final. Obtenção de todas as distâncias a partir do vértice (1). Figura 5: Arborescência de distâncias a partir do vértice (1). 2.2 Aplique o algoritmo de Bellmann-Ford aos dois grafos (mesma ob- servação). 2.2.1 Para o primeiro grafo teremos: (A, B) : dAB(∞) > d11(0) + vAB(12) → dAB = 12 anterior(B) = A (A, C) : dAC(∞) > d11(0) + vAC(4) → dAC = 4 anterior(C) = A (C, B) : dAB(12) < dAC(4) + vCB(10) → dAB = 12 sem modificação (C, D) : dAD(∞) > dAC(4) + vCD(2) → dAD = 6 anterior(D) = C (C, E) : dAE(∞) > dAC(4) + vCE(2) → dAE = 6 anterior(E) = C (D, C) : dAC(4) < dAD(6) + vDC(8) → dAC = 4 sem modificação (D, F) : dAF (∞) > dAD(6) + vDF (6) → dAF = 12 anterior(F) = D 9
  • 20. (E, B) : dAB(12) > dAE(6) + vEB(2) → dAB = 8 anterior(B) = E (E, F) : dAF (12) >= dAE(6) + vEF (6) → dAF = 12 anterior(F) = E (B, C) : dAC(4) < dAB(8) + vBC(6) → dAC = 4 sem modificação (B, D) : dAD(6) < dAB(8) + vBD(6) → dAD = 6 sem modificação Em uma segunda iteração não haverá mudanças nos valores das distâncias. 2.2.2 Para o segundo grafo teremos: (1, 2) : d12(∞) > d11(0) + v12(1) → d12 = 1 anterior(2) = 1 (1, 5) : d15(∞) > d11(0) + v15(1) → d15 = 1 anterior(5) = 1 (2, 3) : d13(∞) > d12(1) + v23(1) → d13 = 2 anterior(3) = 2 (2, 4) : d14(∞) > d12(1) + v24(2) → d14 = 3 anterior(4) = 2 (3, 4) : d14(3) > d13(2) + v34(4) → sem modificação (3, 5) : d15(1) > d13(2) + v35(2) → sem modificação (4, 1) : d11(0) > d14(3) + v41(3) → sem modificação (5, 1) : d11(0) > d15(1) + v51(2) → sem modificação (5, 4) : d14(3) > d15(1) + v54(1) → d14 = 2 anterior(4) = 5 Em uma segunda iteração não haverá mudanças nos valores das distâncias. 2.3 No segundo grafo, mude o valor do arco(3,5) para -2 e aplique os dois algoritmos. Observe os resultados obtidos e interprete. Figura 6: Grafo com o valor do arco (3,5) invertido. 2.3.1 Dijkstra: (1)* (2) (3) (4) (5) Distância 0 1000 1000 1000 1000 Anterior - - - - - Tabela 21: 1o Passo. Iniciando tabela com distâncias a partir do vértice (1). Usando o valor 1000 para representar infinito. Fechando o vértice (1), pois é nosso vértice de partida. 10
  • 21. (1)* (2) (3) (4) (5) Distância 0 1 1000 1000 1 Anterior - (1) - - (1) Tabela 22: 2o Passo. Obtendo as rotas para os vértices (2) e (5) apartir do vértice (1). (1)* (2) (3) (4) (5) Distância 0 1 2 3 1 Anterior - (1) (2) (2) (1) Tabela 23: 3o Passo. Obtendo as rotas para os vértices (3) e (4) apartir do vértice (2). (1)* (2)* (3)* (4) (5) Distância 0 1 2 3 0 Anterior - (1) (2) (2) (3) Tabela 24: 4o Passo. Obtendo as rotas para os vértices (4) e (5) apartir do vértice (3). (1)* (2)* (3)* (4) (5) Distância 0 1 2 3 0 Anterior - (1) (2) (2) (3) Tabela 25: 5o Passo. Obtendo rota para o vértice (1) apartir do vértice (4). Observe que o vértice (1) já se encontra fechado. (1)* (2)* (3)* (4)* (5) Distância 0 1 2 1 0 Anterior - (1) (2) (5) (3) Tabela 26: 6o Passo. Obtendo rota para o vértice (1) e (4) apartir do vértice (5). (1)* (2)* (3)* (4)* (5)* Distância 0 1 2 1 0 Anterior - (1) (2) (5) (3) Tabela 27: Tabela com todas as distâncias a partir do vértice (1). Houve uma redução nas distâncias devido ao caminho com valor negativo. 11
  • 22. 2.3.2 Bellmann-Ford: (1, 2) : d12(∞) > d11(0) + v12(1) → d12 = 1 anterior(2) = 1 (1, 5) : d15(∞) > d11(0) + v15(1) → d15 = 1 anterior(5) = 1 (2, 3) : d13(∞) > d12(1) + v23(1) → d13 = 2 anterior(3) = 2 (2, 4) : d14(∞) > d12(1) + v24(2) → d14 = 3 anterior(4) = 2 (3, 4) : d14(3) > d13(2) + v34(4) → sem modificação (3, 5) : d15(1) > d13(2) + v35(−2) → d15 = 0 anterior(5) = 3 (4, 1) : d11(0) > d14(3) + v41(3) → sem modificação (5, 1) : d11(0) > d15(1) + v51(2) → sem modificação (5, 4) : d14(3) > d15(0) + v54(1) → d14 = 1 anterior(4) = 5 Em uma segunda iteração não haverá mudanças nos valores das distâncias. 3 Questão 5. Utilizando o grafo a seguir, aplique o algo- ritmo de Dijkstra para achar a menor distância do vér- tice A aos outros vértices e construa a arborescência de distâncias a partir de A. Figura 7: Grafo fornecido para a questão de número 5. A* B C D E F G H I J Distância 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ Anterior - - - - - - - - - - Tabela 28: 1o Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo “Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Anterior” indica o vértice anterior pelo qual o caminho está sendo contruído. A* B* C* D* E* F* G* H* I* J* Distância 0 4 1 2 7 4 5 4 8 6 Anterior - A A C B D D D F H Tabela 29: Último Passo. Construção da tabela com as distâncias a partir do vértice A. 12
  • 23. Figura 8: Arborescência de distâncias a partir do vértice A. 13
  • 24. Lista de Exercícios - Teoria dos Grafos Michel Alves dos Santos ∗ Novembro de 2010 ∗ Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E- mails: michel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leonardo Viana Pereira. 1
  • 25. Conteúdo Lista de Figuras 4 Lista de Tabelas 5 1 Exercícios do Capítulo 4 6 1.1 Determinine todas as árvores parciais do grafo G a seguir (Figura 1). . . . 6 1.2 Como podemos adaptar o algoritmo de Kruskal para obter o valor de uma árvore parcial de valor máximo? . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 Um grafo G é autocomplementar se e somente se: . . . . . . . . . . . . . . 7 1.4 Um problema muito conhecido é o de atravessar um rio com uma cabra, um lobo e um cesto de alfaces, com o auxílio de um barqueiro, em um barco que só comporta dois desses elementos (problema da travessia). Dadas as restrições óbvias sobre quem pode, ou não, esperar lado a lado em uma margem, monte um modelo de caminho que indique ao menos uma sequência viável de travessia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.5 Um modelo parecido é o “dos 8 litros”: você acha em um depósito de vinhos um garrafão com capacidade para 8 litros, cheio de um vinho que você deseja dividir meio a meio com um amigo. A dificuldade é que, no depósito, existem apenas 2 garrafas vazias, uma com capacidade para 5 e a outra para 3 litros. A divisão talvez seja possível passando-se vinho de uma dessas garrafas para outra, em uma sequência. Monte um modelo que indica a sequência a ser seguida, para que no final se tenham 4 litros na garrafa de 8 e os outros 4, naturalmente, na de 5 litros. . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2 Exercícios do Capítulo 8 10 2.1 Mostre que, se um grafo G não orientado for euleriano, seu conjunto de arestas poderá ser particionado em ciclos disjuntos. . . . . . . . . . . . . . 10 2.2 Explique por que, no PCC orientado, todas as extremidades de arco adici- onadas a um vértice dado serão sempre, ou saídas, ou chegadas. . . . . . . 10 2.3 Construa uma sequência de De Brujin B(2,3). . . . . . . . . . . . . . . . . 10 2.4 Mostre que sempre existe uma sequência de De Brujin (r,s), para quaisquer r,s inteiros positivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.5 Construa um algoritmo para achar um ciclo euleriano em um grafo euleriano não orientado, a partir da construção progressiva de ciclos ao longo de um percurso inicial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.6 Verifique se os grafos a seguir(figura 5) são hamiltonianos ou não-hamiltonianos, justificando a resposta(Dica: Um deles é hamiltoniano e o outro não). . . . 11 2
  • 26. 2.7 Considere dois vértices v e w em um grafo G com n vértices. Mostre que, se d(v) + d(w) >= n e G possui um percurso hamiltoniano entre v e w, então G é hamiltoniano. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.8 Mostre que os grafos correspondentes aos 5 sólidos platônicos são hamilto- nianos. Quais deles são eulerianos? . . . . . . . . . . . . . . . . . . . . . . 11 3
  • 27. Lista de Figuras 1 Determinação de árvores parciais. . . . . . . . . . . . . . . . . . . . . . . . 6 2 Algumas árvores parciais do grafo G. . . . . . . . . . . . . . . . . . . . . . 6 3 Modelo para o problema da travessia. . . . . . . . . . . . . . . . . . . . . . 8 4 Problema da divisão do vinho. . . . . . . . . . . . . . . . . . . . . . . . . . 9 5 Verificação de ciclos hamiltonianos. . . . . . . . . . . . . . . . . . . . . . . 11 4
  • 29. 1 Exercícios do Capítulo 4 1.1 Determinine todas as árvores parciais do grafo G a seguir (Figura 1). Figura 1: Determinação de árvores parciais. (a) Você pode garantir que realmente determinou todas? (b) O processo que você utilizou seria eficaz para o grafo H? Figura 2: Algumas árvores parciais do grafo G. (a) Não. (b) Seria necessário um tempo considerável de processamento uma vez que o processo usado foi a retirada aleatória de ciclos. Como o grafo H possui vários ciclos o processo não seria eficaz. 1.2 Como podemos adaptar o algoritmo de Kruskal para obter o valor de uma árvore parcial de valor máximo? É simples, basta ao invés de pegar a aresta com menor valor a cada iteração, pegar a arestas com maior valor em cada iteração, dessa forma o resultado será o valor de uma árvore parcial de valor máximo. 6
  • 30. 1.3 Um grafo G é autocomplementar se e somente se: 1. G = G. (a) Que ordem deve ter uma árvore autocomplementar? (b) Quais serão as árvores autocomplementares? 1.4 Um problema muito conhecido é o de atravessar um rio com uma cabra, um lobo e um cesto de alfaces, com o auxílio de um barqueiro, em um barco que só comporta dois desses ele- mentos (problema da travessia). Dadas as restrições óbvias sobre quem pode, ou não, esperar lado a lado em uma mar- gem, monte um modelo de caminho que indique ao menos uma sequência viável de travessia. Levando em consideração que todos estavam na margem 1 e o objetivo é que todos estejam na margem 2, teremos o seguinte algoritmo: 1. Barqueiro leva ovelha para margem 2. 2. Barqueiro volta só para margem 1. 3. Barqueiro leva o lobo ou cesto de alfaces para margem 2. 4. Barqueiro volta com o a ovelha. 5. Barqueiro leva o cesto de alfaces ou lobo. 6. Barqueiro volta só. 7. Barqueiro leva a ovelha. Para montar um modelo de caminho algumas abstrações devem serem feitas. Cada nó terá em seu rótulo um par ordenado (x,y) onde x pertence ao conjunto 1,2,3,4 representando, respectivamente, a ovelha, o lobo, o cesto de alface e o barqueiro e y pertence ao conjunto 1,2 onde representamos, respectivamente, a margem 1 e margem 2. Ou seja, no par terá quem está no barco e para onde está indo, lembrando que no caso onde x = 1 ou x = 2, ou x = 3, fica subentendido que o barqueiro também se encontra no barco. A ilustração a seguir reforça a sequência de travessia apresentada (Figura 3). Vale observar que um algoritmo de busca em profundidade resolveria esse modelo de caminho. 7
  • 31. Figura 3: Modelo para o problema da travessia. 1.5 Um modelo parecido é o “dos 8 litros”: você acha em um depósito de vinhos um garrafão com capacidade para 8 litros, cheio de um vinho que você deseja dividir meio a meio com um amigo. A dificuldade é que, no depósito, existem apenas 2 garrafas vazias, uma com capacidade para 5 e a outra para 3 litros. A divisão talvez seja possível passando-se vinho de uma dessas garrafas para outra, em uma sequência. Monte um modelo que indica a sequência a ser seguida, para que no final se tenham 4 litros na garrafa de 8 e os outros 4, naturalmente, na de 5 litros. Para a resolução desse problema propomos o seguinte algoritmo: 1. A garrafa 8L está cheia. 2. Colocamos 8L em 5L, sobrando 3 litros em 8L. 3. Colocamos 5L em 3L, sobrando 2 litros em 5L. 3 litros em 8L e 3 litros em 3L. 4. Colocamos 3L em 8L, dessa forma 8L ficará com 6 litros e 5L com 2 litros. 5. Colocamos 5L em 3L, dessa forma 3L estará com 2 litros, 5L vazia e 8L com 6 litros. 6. Colocamos o conteúdo de 8L em 5L, assim 5L ficará com 5 litros, 8L com 1 litro e 3L com 2 litros. 8
  • 32. 7. Colocamos o conteúdo de 5L em 3L até que 3L encha e com isso teremos 3 litros em 3L, 4 litros em 5L e 1 litro em 8L. 8. Colocamos o conteúdo de 3L em 8L e assim teremos 8L com 4 litros e 5L com 4 litros. Para montar o modelo de caminho algumas abstrações devem serem feitas. Cada nó terá em seu rótulo uma tupla de três ordenado (x,y,z) onde x e z pertencem ao conjunto 8,3,5 representando, respectivamente: garrafa de 8L, garrafa de 3L e garrafa de 5L e y pertence ao conjunto 1,2,3,4,5,6,7,8 representando a quantidade de litros a serem tiradas de x e colocadas em z. Vale observar que um algoritmo de busca em profundidade resolveria esse modelo de caminho. Figura 4: Problema da divisão do vinho. 9
  • 33. 2 Exercícios do Capítulo 8 2.1 Mostre que, se um grafo G não orientado for euleriano, seu conjunto de arestas poderá ser particionado em ciclos dis- juntos. Seja G um grafo euleriano. O caso em que G não possui arestas é trivial. Sendo G conexo e tendo pelo menos uma aresta, todo o seu vértice tem, pelo menos, grau 2. Portanto, pelo Teorema de Euler, possui um ciclo C1. Retirando de G as arestas de C1 obtemos um subgrafo gerador G1 cujos vértices têm ainda todos grau par. Se G1 não tem arestas, está terminada a demonstração desta implicação. Caso contrário, G1 tem um ciclo C2 e a repetição do argumento anterior conduz-nos a um grafo G2, subgrafo gerador de G1, cujos vértices têm grau par. Se G2 não tem arestas terminamos, caso contrário repete-se o argumento. E continuamos com este raciocínio sucessivamente até obtermos um grafo Gn totalmente desconexo (isto é, sem arestas). Aí teremos uma partição das arestas de G em n ciclos. 2.2 Explique por que, no PCC orientado, todas as extremidades de arco adicionadas a um vértice dado serão sempre, ou saídas, ou chegadas. 2.3 Construa uma sequência de De Brujin B(2,3). B(2, 3) : 11101000 2.4 Mostre que sempre existe uma sequência de De Brujin (r,s), para quaisquer r,s inteiros positivos. 2.5 Construa um algoritmo para achar um ciclo euleriano em um grafo euleriano não orientado, a partir da construção progressiva de ciclos ao longo de um percurso inicial. grau = 0; soma = 0; matrizAdjacencias[][]; N = NumeroDeLinhas(matrizAdjacencias[][]); i = 0; //i é a linha atual Enquanto ((soma <= 2) e ( i<= N)) { grau = 0; Para( j=0; j < N; j++) grau = grau + matrizAdjacencias[i][j]; 10
  • 34. Se (grau mod 2 == 1) soma ++; //caso seja ímpar i++; } Se (soma > 2) Escreve ‘CAMINHO NÃO EXISTENTE’ Senão Escreve ‘CAMINHO EXISTENTE’ 2.6 Verifique se os grafos a seguir(figura 5) são hamiltonia- nos ou não-hamiltonianos, justificando a resposta(Dica: Um deles é hamiltoniano e o outro não). Figura 5: Verificação de ciclos hamiltonianos. O primeiro grafo é hamiltoniano porque podemos passar uma única vez por cada vértice. Já o segundo grafo, não é hamiltoniano porque não podemos encontrar um caminho hamiltoniano. Sempre faz-se necessário passar mais de uma vez por um vértice. 2.7 Considere dois vértices v e w em um grafo G com n vértices. Mostre que, se d(v) + d(w) >= n e G possui um percurso hamiltoniano entre v e w, então G é hamiltoniano. 2.8 Mostre que os grafos correspondentes aos 5 sólidos platô- nicos são hamiltonianos. Quais deles são eulerianos? 11
  • 35. Lista de Exercícios - Teoria dos Grafos Exercícios do Capítulo 4 Michel Alves dos Santos ∗ Abril de 2011 ∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi- chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo- nardo Viana Pereira. 1
  • 36. Conteúdo Lista de Figuras 2 1 Questão 3. Determinine todas as árvores parciais do grafo G a seguir. 2 2 Questão 6. Como podemos adaptar o algoritmo de Kruskal para obter o valor de uma árvore parcial de valor máximo? 3 3 Questão 9. Um grafo G é autocomplementar se e somente se: 3 4 Questão 16. Um problema muito conhecido é o de atravessar um rio com uma cabra, um lobo e um cesto de alfaces, com o auxílio de um barqueiro, em um barco que só comporta dois desses elementos (problema da travessia). Dadas as restrições óbvias sobre quem pode, ou não, esperar lado a lado em uma margem, monte um modelo de caminho que indique ao menos uma sequência viável de travessia. 3 Lista de Figuras 1 Determinação de árvores parciais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Algumas árvores parciais do grafo G. . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 Modelo para o problema da travessia. . . . . . . . . . . . . . . . . . . . . . . . . . 4 1 Questão 3. Determinine todas as árvores parciais do grafo G a seguir. Figura 1: Determinação de árvores parciais. (a) Você pode garantir que realmente determinou todas? (b) O processo que você utilizou seria eficaz para o grafo H? Figura 2: Algumas árvores parciais do grafo G. 2
  • 37. (a) Não. (b) Seria necessário um tempo considerável de processamento uma vez que o processo usado foi a retirada aleatória de ciclos. Como o grafo H possui vários ciclos o processo não seria eficaz. 2 Questão 6. Como podemos adaptar o algoritmo de Kruskal para obter o valor de uma árvore parcial de valor máximo? É simples, basta ao invés de pegar a aresta com menor valor a cada iteração, pegar a arestas com maior valor em cada iteração, dessa forma o resultado será o valor de uma árvore parcial de valor máximo. 3 Questão 9. Um grafo G é autocomplementar se e somente se: 1. G = G. (a) Que ordem deve ter uma árvore autocomplementar? Como a ordem é pela cardinalidade ou número de vértices de um grafo então, |V(G)| será igual a |V(G)|, onde V(X) é a função que retorna os vértices do grafo X e |V(X)| é o operador que nos informa o número de vértices existentes no conjunto dos vértices pertencentes ao grafo X. (b) Quais serão as árvores autocomplementares? Serão todas aquelas isomórficas a G. 4 Questão 16. Um problema muito conhecido é o de atravessar um rio com uma cabra, um lobo e um cesto de alfaces, com o auxílio de um barqueiro, em um barco que só comporta dois desses elementos (problema da travessia). Dadas as restrições óbvias sobre quem pode, ou não, esperar lado a lado em uma margem, monte um modelo de caminho que indique ao menos uma sequência viável de travessia. Levando em consideração que todos estavam na margem 1 e o objetivo é que todos estejam na margem 2, teremos o seguinte algoritmo: 1. Barqueiro leva ovelha para margem 2. 2. Barqueiro volta só para margem 1. 3. Barqueiro leva o lobo ou cesto de alfaces para margem 2. 4. Barqueiro volta com o a ovelha. 5. Barqueiro leva o cesto de alfaces ou lobo. 6. Barqueiro volta só. 7. Barqueiro leva a ovelha. Para montar um modelo de caminho algumas abstrações devem serem feitas. Cada nó terá em seu rótulo um par ordenado (x,y) onde x pertence ao conjunto 1,2,3,4 representando, respectivamente, a ovelha, o lobo, o cesto de alface e o barqueiro e y pertence ao conjunto 1,2 onde representamos, respectivamente, a margem 1 e margem 2. Ou seja, no par terá quem está no barco e para onde está indo, lembrando que no caso onde x = 1 ou x = 2, ou x = 3, fica subentendido que o barqueiro também se encontra no barco. A ilustração a seguir reforça a sequência de travessia apresentada (Figura 3). Vale observar que um algoritmo de busca em profundidade resolveria esse modelo de caminho. 3
  • 38. Figura 3: Modelo para o problema da travessia. 4
  • 39. Lista de Exercícios - Teoria dos Grafos Exercícios do Capítulo 2 - Questões 10, 11, 16, 19 Michel Alves dos Santos ∗ Março de 2011 Conteúdo Lista de Figuras 1 1 Questão 10 2 1.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Questão 11 2 2.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 Questão 16 4 4 Questão 19 4 4.1 a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4.2 b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4.3 c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Lista de Figuras 1 Grafo apresentado para décima questão. A primeira figura indica apenas as ligações entre os vértices, a segunda apresenta o grafo complementar. . . . . . . . . . . . . 2 2 Grafo bipartido original, grafo bipartido completo obtido a partir do bipartido ori- ginal e grafo bipartido complementar obtido a partir do grafo bipartido original. . 2 3 Grafos não isomorfos - questão a). . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 Grafos não isomorfos - questão b). . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 5 Através do Teorema de Enumeração de Polya, podemos provar que um grafo com 5 vértices e 7 arestas possui 4 grafos não isomorfos. Os números ao lado dos vértices denotam o grau de cada vértice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi- chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo- nardo Viana Pereira. 1
  • 40. 6 Grafos não isomorfos obtidos através do software Mathematica. Usando o pacote Combinatorica‘ podemos obter o número de grafos não isomorfos através do co- mando NumberOfGraphs[n,k], onde n representa o número de vértices e k o número de arestas. Através da função ListGraphs[n,k], pertencente ao mesmo pacote, po- demos obter a estrutura de cada grafo. Finalmente, utilizando o comando Show- GraphArray[ListGraphs[n,k]] somos capazes de desenhar todos os grafos simples não isomorfos com n vértices e k arestas. A base para a obtenção da quantidade de grafos não isomorfos origina-se do Teorema de Polya. . . . . . . . . . . . . . . . . . 3 7 Grafo sf-conexo com caminho em vermelho passando por todos os vértices. . . . . . 4 8 Grafo de 8 e 9 vértices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1 Questão 10 1.1 a) Figura 1: Grafo apresentado para décima questão. A primeira figura indica apenas as ligações entre os vértices, a segunda apresenta o grafo complementar. Primeiramente podemos observar que a clique do grafo original deu origem a um conjunto independente em seu respectivo grafo complementar, além disso podemos concluir que o número de ligações para cada vértice no grafo complementar será igual ao número total de vértices menos o antigo número de ligações mais um, ou seja: K(v) = |V | − (d(v) + 1) Onde K(v) é o novo grau do vértice no grafo complementar, |V | é o número de vértices no grafo original e d(v) o grau do vértice no grafo original. 1.2 b) Figura 2: Grafo bipartido original, grafo bipartido completo obtido a partir do bipartido original e grafo bipartido complementar obtido a partir do grafo bipartido original. 2 Questão 11 2.1 a) Dois grafos são isomorfos se e somente se existir uma função bijetiva entre seus conjuntos de vértices, que preserve suas relações de adjacência. Observa-se nos grafos abaixo, que G1 possui um vértice de grau 4 e G2, possui dois vértices de grau 4. Portanto, G1 e G2 não são isomorfos, pois a relação de adjacência não foi preservada. 2
  • 41. Figura 3: Grafos não isomorfos - questão a). 2.2 b) Figura 4: Grafos não isomorfos - questão b). Para esta questão vale a pena lembrar que através do teorema que relaciona o número de arestas com a soma dos graus dos vértices de um grafo podemos checar se a construção do grafo realmente atende a seguinte propriedade: a soma dos graus de cada vértice deve ser igual ao dobro do número de arestas. Figura 5: Através do Teorema de Enumeração de Polya, podemos provar que um grafo com 5 vértices e 7 arestas possui 4 grafos não isomorfos. Os números ao lado dos vértices denotam o grau de cada vértice. Figura 6: Grafos não isomorfos obtidos através do software Mathematica. Usando o pacote Com- binatorica‘ podemos obter o número de grafos não isomorfos através do comando NumberOf- Graphs[n,k], onde n representa o número de vértices e k o número de arestas. Através da função ListGraphs[n,k], pertencente ao mesmo pacote, podemos obter a estrutura de cada grafo. Final- mente, utilizando o comando ShowGraphArray[ListGraphs[n,k]] somos capazes de desenhar todos os grafos simples não isomorfos com n vértices e k arestas. A base para a obtenção da quantidade de grafos não isomorfos origina-se do Teorema de Polya. 3
  • 42. 3 Questão 16 A definição de grafo sf-conexo diz que para todo par de vértices u, v, existirá um caminho de u até v e/ou existirá um caminho de v até u. Lembre-se que caminho é um tipo de percurso em grafos orientados onde todos os arcos estão no sentido início do percurso −→ fim do percurso(ou seja, não há voltas/ciclos). Veja o exemplo abaixo: Figura 7: Grafo sf-conexo com caminho em vermelho passando por todos os vértices. 4 Questão 19 4.1 a) Nenhum grafo antirregular com n vértices pode ter mais que n − 1 graus diferentes. 4.2 b) Se uma sequência de graus gerar um único grafo ela será chamada unigráfica. As sequências de graus dos grafos antirregulares são unigráficas. 4.3 c) Figura 8: Grafo de 8 e 9 vértices. 4
  • 43. Teoria dos Grafos - Exerc´ıcios do Cap´ıtulo 3 Algoritmo de Dijkstra e Bellmann-Ford Michel Alves dos Santos ∗ Abril de 2011 ∗Bacharelando em Ciˆencia da Computa¸c˜ao, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi- chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Respons´avel: Leo- nardo Viana Pereira. 1
  • 44. Conte´udo Lista de Figuras 2 Lista de Tabelas 2 1 Algoritmo de Dijkstra. 3 2 Algoritmo de Bellmann-Ford. 4 3 Algoritmos de Dijkstra e Bellmann-Ford. 4 4 Sa´ıda Produzida Pela Aplica¸c˜ao. 4 Lista de Figuras 1 Grafo utilizado para averiguar a efetividade da implementa¸c˜ao do Algoritmo de Dijkstra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Arborescˆencia de distˆancias obtida atrav´es da aplica¸c˜ao do Algoritmo de Dijkstra. Esta arborescˆencia pode ser constru´ıda com base nos valores armazenados na tabela de distˆancias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 Grafo utilizado para averiguar a efetividade da implementa¸c˜ao do Algoritmo de Bellmann-Ford. Ao final do processo obtivemos a mesma arborescˆencia de distˆancias. 4 Lista de Tabelas 1 Constru¸c˜ao da tabela de distˆancias entre v´ertices. . . . . . . . . . . . . . . . . . . . 3 2 Depois da avalia¸c˜ao de todos os v´ertices finalizamos a constru¸c˜ao da tabela com todas as distˆancias a partir da origem. Com base nesta tabela tamb´em podemos construir a arborescˆencia de distˆancias. . . . . . . . . . . . . . . . . . . . . . . . . . 4 2
  • 45. 1 Algoritmo de Dijkstra. Para verifica¸c˜ao dos resultados utilizando o algoritmo de Dijkstra, usamos primeiramente o grafo observado abaixo. Informalmente, sem nenhuma criteriosidade ou formalidade matem´atica Figura 1: Grafo utilizado para averiguar a efetividade da implementa¸c˜ao do Algoritmo de Dijkstra. podemos descrever o Algoritmo de Dijkstra da seguinte maneira: procuramos o v´ertice mais pr´o- ximo de A, depois, sucessivamente, procuramos entre os v´ertices n˜ao visitados aquele que tem a menor distˆancia desde A, diretamente ou passando por algum v´ertice j´a visitado, anotando sem- pre o percurso escolhido. Estamos considerando que nunca teremos distˆancias negativas, pois isso atrapalharia o algoritmo, j´a que o mesmo n˜ao sabe lidar com distˆancias negativas(ele pode entrar em looping). Come¸camos por construir uma tabela de distˆancias entre os v´ertices. Para os v´ertices n˜ao ligados consideraremos a distˆancia como infinita. Para efeitos de implementa¸c˜ao a distˆancia A B C D A 0 12 2 ∞ B ∞ 0 ∞ ∞ C ∞ 5 0 2 D ∞ 1 ∞ 0 Tabela 1: Constru¸c˜ao da tabela de distˆancias entre v´ertices. infinita foi representada pelo m´aximo n´umerico que poderia ser indexado pelo computador hospe- deiro da aplica¸c˜ao/programa. Em C++ (linguagem utilizada para implementar o algoritmo) esse m´aximo n´umerico ´e obtido atrav´es da biblioteca limits com o uso da classe numeric limits. Um exemplo de uso dessas instru¸c˜oes ´e dado logo abaixo: // Abaixo um exemplo de obten¸c~ao de limite n´umerico. Oten¸c~ao do maior inteiro // com sinal que pode ser indexado, bem como o maior ponto flutuante de precis~ao // dupla que pode ser representado na m´aquina hospedeira da aplica¸c~ao. int maximo_int = numeric_limits<int>::max(); /*M´aximo inteiro*/ double maximo_dbl = numeric_limits<double>::max(); /*M´aximo ponto flutuante*/ Figura 2: Arborescˆencia de distˆancias obtida atrav´es da aplica¸c˜ao do Algoritmo de Dijkstra. Esta arborescˆencia pode ser constru´ıda com base nos valores armazenados na tabela de distˆancias. 3
  • 46. A B C D Distˆancia 0 5 2 4 Anterior - D A C Tabela 2: Depois da avalia¸c˜ao de todos os v´ertices finalizamos a constru¸c˜ao da tabela com todas as distˆancias a partir da origem. Com base nesta tabela tamb´em podemos construir a arborescˆencia de distˆancias. 2 Algoritmo de Bellmann-Ford. Para verifica¸c˜ao dos resultados utilizando o algoritmo de Bellmann-Ford, usamos o mesmo grafo com o qual averiguamos a capacidade do algoritmo de Dijkstra. Figura 3: Grafo utilizado para averiguar a efetividade da implementa¸c˜ao do Algoritmo de Bellmann-Ford. Ao final do processo obtivemos a mesma arborescˆencia de distˆancias. Abaixo verificamos os passos utilizados para c´alculo das rotas a partir das informa¸c˜oes de distˆancias entre os v´ertices. (A, B) : dAB(∞) > dAA(0) + vAB(12) → dAB = 12 anterior(B) = A (A, C) : dAC(∞) > dAA(0) + vAC(2) → dAC = 2 anterior(C) = A (C, B) : dAB(12) > dAC(2) + vCB(5) → dAB = 7 anterior(B) = C (C, D) : dAD(∞) > dAC(2) + vCD(2) → dAD = 4 anterior(D) = C (D, B) : dAB(7) > dAD(4) + vDB(1) → dAB = 5 anterior(B) = D Em uma segunda itera¸c˜ao n˜ao haver´a mudan¸cas nos valores das distˆancias c´alculadas atrav´es do Algoritmo de Bellmann-Ford. 3 Algoritmos de Dijkstra e Bellmann-Ford. Os algoritmos de Dijkstra e Bellmann-Ford foram implementados atrav´es da linguagem C++. Os fontes com as respectivas classes e objetos de teste podem ser encontrados em anexo. As funcionalidades das partes integrantes dos fontes podem ser facilmente entendidas, j´a que todas as instru¸c˜oes foram exaustivamente documentadas. Para uma melhor compreens˜ao dos mecanismos utilizados recomendamos a leitura dos livros Algorithms de Robert Sedgewick, The Algorithm Design Manual de Steven S. Skiena, C++: The Complete Reference de Herbert Schildt, C++ by Dissection de Ira Pohl, The C++ Programming Language de Bjarne Stroustrup e finalmente Effective C++ de Scott Meyers. 4 Sa´ıda Produzida Pela Aplica¸c˜ao. A seguir ser´a exibida a sa´ıda produzida pela aplica¸c˜ao com base no exemplo dado anteriormente (ver figura 1). Verifique a evolu¸c˜ao da tabela de distˆancias para a sa´ıda do algoritmo de Dijkstra e o n´umero de itera¸c˜oes necess´arias, para que nesse exemplo, possamos chegar a um estado final. 4
  • 47. Matriz de Adjac^encias: [e11,0] [e12,1] [e13,1] [e14,0] [e21,1] [e22,0] [e23,1] [e24,1] [e31,1] [e32,1] [e33,0] [e34,1] [e41,0] [e42,1] [e43,1] [e44,0] Lista de V´ertices: [A,0] [B,0] [C,0] [D,0] Graus dos V´ertices: [A,0] : 2 [B,0] : 3 [C,0] : 3 [D,0] : 2 Matriz de Dist^ancias: 0 12 2 2147483647 2147483647 0 2147483647 2147483647 2147483647 5 0 2 2147483647 1 2147483647 0 Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][1.79769e+308] [1.79769e+308] [1.79769e+308] [1.79769e+308] [Anterior] [ ] [ ] [ ] [ ] Executando o Algoritmo de Dijkstra: Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [12] [2] [1.79769e+308] [Anterior] [ ] [A] [A] [ ] Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [7] [2] [1.79769e+308] [Anterior] [ ] [C] [A] [ ] Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [7] [2] [1.79769e+308] [Anterior] [ ] [C] [A] [ ] Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [7] [2] [4] [Anterior] [ ] [C] [A] [C] Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [7] [2] [4] [Anterior] [ ] [C] [A] [C] Tabela de Dist^ancias: [A] [B] [C] [D] 5
  • 48. [Dist^ancias][0] [5] [2] [4] [Anterior] [ ] [D] [A] [C] Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [5] [2] [4] [Anterior] [ ] [D] [A] [C] Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [5] [2] [4] [Anterior] [ ] [D] [A] [C] Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [5] [2] [4] [Anterior] [ ] [D] [A] [C] Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [5] [2] [4] [Anterior] [ ] [D] [A] [C] Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [5] [2] [4] [Anterior] [ ] [D] [A] [C] Tabela de Dist^ancias: [A] [B] [C] [D] [Dist^ancias][0] [5] [2] [4] [Anterior] [ ] [D] [A] [C] 6
  • 49. Teoria dos Grafos - Exercícios do Capítulo 8 Michel Alves dos Santos ∗ Junho de 2011 Conteúdo Lista de Figuras 1 1 Mostre que, se um grafo G não orientado for euleriano, seu conjunto de arestas poderá ser particionado em ciclos disjuntos. 1 2 No Exemplo do item 8.4.2, execute o algoritmo de Dijkstra e verifique a cons- trução da matriz de alocação, o resultado do algoritmo húngaro e os caminhos apontados pelo vetor ‘Anterior’ acompanhando-os no grafo. 2 3 Construa uma sequência de De Brujin B(2,3). 2 4 Mostre que o gráfico de Petersen(figura 1) é não hamiltoniano. Explique por- que as condições suficientes expostas no capítulo não se aplicam a ele.(Dica: Aproveite a simetria do grafo). 2 5 Construa um algoritmo para achar um ciclo euleriano em um grafo euleriano não orientado, a partir da construção progressiva de ciclos ao longo de um percurso inicial. 3 6 Verifique se os grafos a seguir(figura 2) são hamiltonianos ou não-hamiltonianos, justificando a resposta(Dica: Um deles é hamiltoniano e o outro não). 3 Lista de Figuras 1 Grafo de Petersen. Sua sequência gráfica é (3,3,3,3,3,3,3,3,3,3). . . . . . . . . . . . 2 2 Verificação de ciclos hamiltonianos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1 Mostre que, se um grafo G não orientado for euleriano, seu conjunto de arestas poderá ser particionado em ciclos disjuntos. Seja G um grafo euleriano. O caso em que G não possui arestas é trivial. Sendo G conexo e tendo pelo menos uma aresta, todo o seu vértice tem, pelo menos, grau 2. Portanto, pelo Teorema de Euler, possui um ciclo C1. Retirando de G as arestas de C1 obtemos um subgrafo ∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi- chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo- nardo Viana Pereira. 1
  • 50. gerador G1 cujos vértices têm ainda todos grau par. Se G1 não tem arestas, está terminada a demonstração desta implicação. Caso contrário, G1 tem um ciclo C2 e a repetição do argumento anterior conduz-nos a um grafo G2, subgrafo gerador de G1, cujos vértices têm grau par. Se G2 não tem arestas terminamos, caso contrário repete-se o argumento. E continuamos com este raciocínio sucessivamente até obtermos um grafo Gn totalmente desconexo (isto é, sem arestas). Aí teremos uma partição das arestas de G em n ciclos. 2 No Exemplo do item 8.4.2, execute o algoritmo de Dijks- tra e verifique a construção da matriz de alocação, o re- sultado do algoritmo húngaro e os caminhos apontados pelo vetor ‘Anterior’ acompanhando-os no grafo. Para execução do algoritmo de Dijkstra a partir do vértice com rótulo ‘01’ teremos o seguinte cenário: [Vértice] [01] [02] [03] [04] [05] [06] [07] [08] [09] [10] [Distâncias][0] [85] [inf] [460] [195] [220] [inf] [370] [285] [320] [Anterior] [-] [01] [01] [08] [02] [02] [01] [09] [05] [05] [Vértice] [11] [12] [13] [14] [15] [Distâncias] [inf] [inf] [435] [inf] [inf] [Anterior] [01] [01] [09] [01] [01] Podemos observar que partindo do primeiro vértice encontraremos algumas regiões onde ocorrerão ‘loopings’, que podem ser chamados de caminhos de repetição. Note que nessa primeira iteração tomando como origem o vértice ‘01’ não conseguiremos alcançar todos os vértices, por isso a tabela de distâncias indicará distância infinita(inf). Outros caminhos de repetição, que poderam ser notados no grafo fornecido, são: (02, 05, 09), (06, 03, 02, 05, 09), (08, 04), (15, 11) e (15, 11, 07, 08, 05, 10, 14). 3 Construa uma sequência de De Brujin B(2,3). B(2,3): 11101000 4 Mostre que o gráfico de Petersen(figura 1) é não hamilto- niano. Explique porque as condições suficientes expostas no capítulo não se aplicam a ele.(Dica: Aproveite a sime- tria do grafo). Figura 1: Grafo de Petersen. Sua sequência gráfica é (3,3,3,3,3,3,3,3,3,3). O grafo de Petersen é um tipo de grafo de Moore. Este grafo tem grande importância teórica, por diversos motivos; em particular além de ser um grafo de Moore, ele tem cintura 5, é não 2
  • 51. Hamiltoniano e não planar. O grafo de Petersen tem a pecualiaridade de ser contra exemplo para numerosas conjecturas em diferentes temas da teoria dos grafos. Vale a pena registrar que o grafo de Petersen é uma gaiola(grafo regular de cintura dada, com número mínimo de vértices). Uma gaiola é denotada por seus parâmetros como c(d,g) (c = cage). Porém a sequência de graus do grafo de Petersen não é forçosamente hamiltoniana. Um sequência forçosamente hamiltoniana é aquela para qual todas as representações gráficas(conexas) são grafos hamiltonianos. Uma sequência gráfica é uma sequência finita não descrescente, de inteiros positivos, que tenha uma correspondência biunívoca com a sequência dos graus dos vértices de um grafo não orientado G. G é então uma representação gráfica da sequência. 5 Construa um algoritmo para achar um ciclo euleriano em um grafo euleriano não orientado, a partir da construção progressiva de ciclos ao longo de um percurso inicial. grau = 0; soma = 0; matrizAdjacencias[][]; N = NumeroDeLinhas(matrizAdjacencias[][]); i = 0; //i é a linha atual Enquanto ((soma <= 2) e ( i<= N)) { grau = 0; Para( j=0; j < N; j++) grau = grau + matrizAdjacencias[i][j]; Se (grau mod 2 == 1) soma ++; //caso seja ímpar i++; } Se (soma > 2) Escreve ‘CAMINHO NÃO EXISTENTE’ Senão Escreve ‘CAMINHO EXISTENTE’ 6 Verifique se os grafos a seguir(figura 2) são hamiltonianos ou não-hamiltonianos, justificando a resposta(Dica: Um deles é hamiltoniano e o outro não). Figura 2: Verificação de ciclos hamiltonianos. O primeiro grafo é hamiltoniano porque podemos passar uma única vez por cada vértice. Já o segundo grafo, não é hamiltoniano porque não podemos encontrar um caminho hamiltoniano. Sempre faz-se necessário passar mais de uma vez por um vértice. 3
  • 52. Teoria dos Grafos - Exercícios do Capítulo 6 Michel Alves dos Santos ∗ Maio de 2011 Conteúdo Lista de Figuras 1 1 O dono de uma loja de animais comprou certa quantidade de peixes ornamen- tais de diversas espécies, um exemplar de cada espécie. Alguns desses peixes não podem ficar no mesmo aquário. A compatibilidade entre as espécies está retratada na tabela a seguir (1 significa que as espécies não devem ficar no mesmo aquário): 1 Lista de Figuras 1 O dono de uma loja de animais comprou certa quantidade de peixes ornamentais de diversas espécies, um exemplar de cada espécie. Alguns desses peixes não podem ficar no mesmo aquário. A compatibilidade entre as espécies está retratada na tabela a seguir (1 significa que as espécies não devem ficar no mesmo aquário): A B C D E F G H I A 0 0 0 0 0 1 1 0 1 B 0 0 1 0 0 0 0 1 0 C 0 1 0 0 1 0 0 1 0 D 0 0 0 0 1 1 0 1 0 E 0 0 1 1 0 0 1 0 0 F 1 0 0 1 0 0 1 0 1 G 1 0 0 0 1 1 0 1 1 H 0 1 1 1 0 0 1 0 0 I 1 0 0 0 0 1 1 0 0 Tabela 1: Construção da matriz que relaciona espécies não compatíveis. a) Qual é o menor número de aquários necessários para abrigar todos os peixes? ∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi- chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo- nardo Viana Pereira. 1
  • 53. b) É possível distribuir os peixes de forma que cada aquário tenha (aproximadamente) o mesmo número de peixes? • O menor número de aquários é dado pelo número cromático relativo, modelando o mesmo como um grafo e fazendo com que as relações de incompatibilidade representassem as arestas. Dessa forma teríamos que o número mínimo de aquários seria dado por: χ(P) ∆(P) + 1. Sendo ∆(P) = 5, o grau do grafo P, logo precisariamos de no máximo 6 aquários. • Sim. Com o seguinte agrupamento: {A, H}, {B, I}, {G,D,C} e {E, F}. 2
  • 54. Teoria dos Grafos - Exercícios do Capítulo 5 Michel Alves dos Santos ∗ Maio de 2011 Conteúdo Lista de Figuras 2 1 a) Qual o número de independência α(P) do grafo de Petersen, representado a seguir? 2 1.1 Utilize o item (a) para apresentar um acoplamento maximal de P com 3 arestas. . 2 1.2 Use cadeias aumentantes para encontrar um acoplamento maximal de P com 4 arestas. 2 1.3 Encontre um acoplamento máximo de P. Qual o valor de α (P)? . . . . . . . . . . 3 2 Formule o problema de programação inteira que encontra o número de do- minação do grafo a seguir. Mostre o funcionamento da formulação com os subconjuntos de vértices {x1, x2, x3} e {x2, x3, x6}. 3 2.1 Testando para o subconjunto de vértices {x1, x2, x3}. . . . . . . . . . . . . . . . . 4 2.2 Testando para o subconjunto de vértices {x2, x3, x6}. . . . . . . . . . . . . . . . . 4 3 Formule o problema de programação inteira que encontra o número de aco- plamento do grafo a seguir. Mostre o funcionamento da formulação com os subconjuntos de arestas {x1x2, x3x6, x5x6} e {x1x2, x3x6, x4x5}. 5 3.1 Testando para o subconjunto de arestas {x1x2, x3x6, x5x6}. . . . . . . . . . . . . . 5 3.2 Testando para o subconjunto de arestas {x1x2, x3x6, x4x5}. . . . . . . . . . . . . . 6 4 Seja o grafo H=(V, E) não orientado, construído da seguinte forma (Veja abaixo). Qual o maior conjunto independente deste grafo? 6 5 Uma cobertura de vértices é um subconjunto de vérices tal que toda aresta é incidente a um vértice do conjunto. O número de cobertura de vértices de um grafo G, notação β(G) é a cardinalidade da menor cobertura de vértices de G. Formule o problema de programação inteira que encontra o número de cobertura do grafo a seguir. Mostre o funcionamento da formulação com os subconjuntos de vértices {x1, x2, x3} e {x2, x4, x6}. 6 5.1 Testando para o subconjunto de vértices {x1, x2, x3}. . . . . . . . . . . . . . . . . 7 5.2 Testando para o subconjunto de vértices {x2, x4, x6}. . . . . . . . . . . . . . . . . 8 6 Formule o problema de programação inteira que encontra o número de cober- tura de arestas do grafo a seguir. Mostre o funcionamento da formulação com os subconjuntos de arestas {ab, bc, bd} e {ab, cd, de}. 8 6.1 Testando para o subconjunto de arestas {ab, bc, bd}. . . . . . . . . . . . . . . . . 9 6.2 Testando para o subconjunto de arestas {ab, cd, de}. . . . . . . . . . . . . . . . . . 9 ∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi- chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo- nardo Viana Pereira. 1
  • 55. 7 O problema das 8 damas consiste em se encontrar um posicionamento para essas peças em um tabuleiro de xadrez, de tal forma que nenhuma dama ataque outra. Diga a qual conceito, dentre os expostos neste capítulo, este problema corresponde. Procure encontrar por inspeção, uma solução para este problema. 9 Lista de Figuras 1 O grafo de Petersen e o conjunto independente máximo em vermelho. . . . . . . . 2 2 O Grafo de Petersen. Acoplamento maximal com 3 arestas. . . . . . . . . . . . . . 2 3 O Grafo de Petersen. Acoplamento maximal com 4 arestas. . . . . . . . . . . . . . 3 4 O Grafo de Petersen. Acoplamento máximo com 5 arestas. . . . . . . . . . . . . . 3 5 Grafo fornecido para que se encontre o seu número de dominação. . . . . . . . . . 3 6 Grafo fornecido para que se encontre o seu número de acoplamento. . . . . . . . . 5 7 Grafo fornecido para que se encontre o seu número de cobertura de vértices. . . . . 6 8 Grafo fornecido para que se encontre o seu número de cobertura de arestas. . . . . 8 9 O Problema das 8 Damas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1 a) Qual o número de independência α(P) do grafo de Pe- tersen, representado a seguir? Figura 1: O grafo de Petersen e o conjunto independente máximo em vermelho. O número α(P) do grafo apresentado é 4. 1.1 Utilize o item (a) para apresentar um acoplamento maximal de P com 3 arestas. As arestas pertencentes ao acoplamento maximal se encontram em vermelho. Este resultado foi obtido por inspeção. Figura 2: O Grafo de Petersen. Acoplamento maximal com 3 arestas. 1.2 Use cadeias aumentantes para encontrar um acoplamento maximal de P com 4 arestas. As arestas pertencentes ao acoplamento maximal se encontram em vermelho tracejado. Este resultado foi obtido por inspeção. 2
  • 56. Figura 3: O Grafo de Petersen. Acoplamento maximal com 4 arestas. 1.3 Encontre um acoplamento máximo de P. Qual o valor de α (P)? As arestas pertencentes ao acoplamento máximo se encontram em vermelho tracejado. Este resultado foi obtido por inspeção. O valor de α (P) é 5. Figura 4: O Grafo de Petersen. Acoplamento máximo com 5 arestas. 2 Formule o problema de programação inteira que encon- tra o número de dominação do grafo a seguir. Mostre o funcionamento da formulação com os subconjuntos de vértices {x1, x2, x3} e {x2, x3, x6}. Figura 5: Grafo fornecido para que se encontre o seu número de dominação. Começamos por tomar a matriz de incidência B do grafo fornecido. Em um passo seguinte B = X1X2 X1X4 X2X3 X2X5 X3X6 X4X5 X5X6 X1 1 1 0 0 0 0 0 X2 1 0 1 1 0 0 0 X3 0 0 1 0 1 0 0 X4 0 1 0 0 0 1 0 X5 0 0 0 1 0 1 1 X6 0 0 0 0 1 0 1 Tabela 1: Construção da matriz de incidência, que relaciona vértices e arestas. encontramos sua transposta, visualizada logo abaixo: Tomamos agora um conjunto de vértices que suspeitamos que faça parte de um conjunto dominante do grafo fornecido. Construímos um vetor 3
  • 57. Bt = X1 X2 X3 X4 X5 X6 X1X2 1 1 0 0 0 0 X1X4 1 0 0 1 0 0 X2X3 0 1 1 0 0 0 X2X5 0 1 0 0 1 0 X3X6 0 0 1 0 0 1 X4X5 0 0 0 1 1 0 X5X6 0 0 0 0 1 1 Tabela 2: Construção da matriz de incidência transposta, que relaciona vértices e arestas. característico, recebendo 1 se o vértice estiver no conjunto e 0 senão. Chamaremos esse vetor de x. Se multiplicarmos Bt por x, estaremos multiplicando a linha de cada aresta pelo vetor x. Se os dois vértices que aparecem na linha da aresta coincidirem com dois elementos do nosso vetor, é porque o nosso conjunto tem dois vértices adjacentes. Resumimos os nosso problema da seguinte forma: • Minimizar 1 · x • Sujeito a Bt · x 1 • xj ∈ {0, 1} Onde nesse modelo o 1 representa o vetor formado por 1’s. 2.1 Testando para o subconjunto de vértices {x1, x2, x3}. Tomaremos como vetor característico x = (1, 1, 1, 0, 0, 0) e agora procediremos com a multipli- cação Bt · x:           1 1 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1           ∗         1 1 1 0 0 0         =           2 1 2 1 1 0 0           O valor 2 que aparece indica que na lista proposta existem vértices adjacentes, logo esse conjunto não pode ser chamado de dominante. 2.2 Testando para o subconjunto de vértices {x2, x3, x6}. Tomaremos como vetor característico x = (0, 1, 1, 0, 0, 1) e agora procediremos com a multipli- cação Bt · x:           1 1 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1           ∗         0 1 1 0 0 1         =           1 0 2 1 2 0 1           O valor 2 que aparece indica que na lista proposta existem vértices adjacentes, logo esse conjunto também não pode ser chamado de dominante. 4
  • 58. 3 Formule o problema de programação inteira que encon- tra o número de acoplamento do grafo a seguir. Mostre o funcionamento da formulação com os subconjuntos de arestas {x1x2, x3x6, x5x6} e {x1x2, x3x6, x4x5}. Figura 6: Grafo fornecido para que se encontre o seu número de acoplamento. Começamos por tomar a matriz de incidência B do grafo fornecido. Tomamos agora um B = X1X2 X1X4 X2X3 X2X5 X3X6 X4X5 X5X6 X1 1 1 0 0 0 0 0 X2 1 0 1 1 0 0 0 X3 0 0 1 0 1 0 0 X4 0 1 0 0 0 1 0 X5 0 0 0 1 0 1 1 X6 0 0 0 0 1 0 1 Tabela 3: Construção da matriz de incidência, que relaciona vértices e arestas. conjunto de arestas que suspeitamos que faça parte de um conjunto de acoplamento do grafo fornecido. Construímos um vetor característico, recebendo 1 se a aresta estiver no conjunto e 0 senão. Chamaremos esse vetor de x. Se multiplicarmos B por x, estaremos multiplicando a linha de cada vértice pelo vetor x. Se as arestas que aparecem na coluna da aresta coincidirem com os elementos do nosso vetor, é porque o nosso conjunto tem arestas adjacentes. Resumimos os nosso problema da seguinte forma: • Maximizar 1 · x • Sujeito a B · x 1 • xj ∈ {0, 1} Onde nesse modelo o 1 representa o vetor formado por 1’s. 3.1 Testando para o subconjunto de arestas {x1x2, x3x6, x5x6}. Tomaremos como vetor característico x = (1, 0, 0, 0, 1, 0, 1) e agora procediremos com a multi- plicação B · x:         1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1         ∗           1 0 0 0 1 0 1           =         1 1 1 0 1 2         O valor 2 que aparece indica que na lista proposta existem arestas adjacentes, logo esse conjunto não pode ser dito como um conjunto de acoplamento. 5
  • 59. 3.2 Testando para o subconjunto de arestas {x1x2, x3x6, x4x5}. Tomaremos como vetor característico x = (1, 0, 0, 0, 1, 1, 0) e agora procediremos com a multi- plicação B · x:         1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1         ∗           1 0 0 0 1 1 0           =         1 1 1 1 1 1         Como todos os valores são menores ou iguais a 1, isso significa que estamos diante de um conjunto de acoplamento. 4 Seja o grafo H=(V, E) não orientado, construído da se- guinte forma (Veja abaixo). Qual o maior conjunto inde- pendente deste grafo? • V = conjunto dos números naturais de 2 a 100. • E = { (a,b) | a e b têm um divisor comum} É o conjunto formado pelos números primos situados entre 2 e 100. 5 Uma cobertura de vértices é um subconjunto de vérices tal que toda aresta é incidente a um vértice do conjunto. O número de cobertura de vértices de um grafo G, nota- ção β(G) é a cardinalidade da menor cobertura de vértices de G. Formule o problema de programação inteira que en- contra o número de cobertura do grafo a seguir. Mostre o funcionamento da formulação com os subconjuntos de vértices {x1, x2, x3} e {x2, x4, x6}. Figura 7: Grafo fornecido para que se encontre o seu número de cobertura de vértices. O problema é muito similar aos anteriores. Começamos por tomar a matriz de incidência B do grafo fornecido. Em um passo seguinte encontramos sua transposta, visualizada logo abaixo: Tomamos agora um conjunto de vértices que suspeitamos que faça parte de um conjunto de cobertura do grafo fornecido. Construímos um vetor característico, recebendo 1 se o vértice estiver no conjunto e 0 senão. Chamaremos esse vetor de x. Se multiplicarmos Bt por x, estaremos multiplicando a linha de cada aresta pelo vetor x. Se os dois vértices que aparecem na linha da 6
  • 60. B = X1X2 X1X4 X2X3 X2X5 X3X6 X4X5 X5X6 X1 1 1 0 0 0 0 0 X2 1 0 1 1 0 0 0 X3 0 0 1 0 1 0 0 X4 0 1 0 0 0 1 0 X5 0 0 0 1 0 1 1 X6 0 0 0 0 1 0 1 Tabela 4: Construção da matriz de incidência, que relaciona vértices e arestas. Bt = X1 X2 X3 X4 X5 X6 X1X2 1 1 0 0 0 0 X1X4 1 0 0 1 0 0 X2X3 0 1 1 0 0 0 X2X5 0 1 0 0 1 0 X3X6 0 0 1 0 0 1 X4X5 0 0 0 1 1 0 X5X6 0 0 0 0 1 1 Tabela 5: Construção da matriz de incidência transposta, que relaciona vértices e arestas. aresta coincidirem com dois elementos do nosso vetor, é porque o nosso conjunto tem dois vértices adjacentes, e se isso ocorre a cobertura será prejudicada, ou seja, devemos ter um subconjunto mínimo de vértices não adjacentes de tal forma que toda aresta seja incidente a um vértice desse subconjunto. Mas observe que toda aresta deve ser incidente, logo o resultado da multiplicação deve nos fornecer um vetor onde todas as suas componentes sejam maiores ou iguais a um, e isso garantirá que todas as arestas estam presentes nessa relação. Resumimos os nosso problema da seguinte forma: • Minimizar 1 · x • Sujeito a Bt · x 1 • xj ∈ {0, 1} Onde nesse modelo o 1 representa o vetor formado por 1’s. 5.1 Testando para o subconjunto de vértices {x1, x2, x3}. Tomaremos como vetor característico x = (1, 1, 1, 0, 0, 0) e agora procediremos com a multipli- cação Bt · x:           1 1 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1           ∗         1 1 1 0 0 0         =           2 1 2 1 1 0 0           O valor 2 que aparece indica que na lista proposta existem vértices adjacentes, e o 0 indica que faltam arestas, logo esse conjunto não pode ser dito como de cobertura. 7
  • 61. 5.2 Testando para o subconjunto de vértices {x2, x4, x6}. Tomaremos como vetor característico x = (0, 1, 0, 1, 0, 1) e agora procediremos com a multipli- cação Bt · x:           1 1 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1           ∗         0 1 0 1 0 1         =           1 1 1 1 1 1 1           Como todos os valores são maiores ou iguais a 1, isso significa que estamos diante de um conjunto de cobertura. 6 Formule o problema de programação inteira que encontra o número de cobertura de arestas do grafo a seguir. Mos- tre o funcionamento da formulação com os subconjuntos de arestas {ab, bc, bd} e {ab, cd, de}. Figura 8: Grafo fornecido para que se encontre o seu número de cobertura de arestas. Começamos por tomar a matriz de incidência B do grafo fornecido. Tomamos agora um B = AB AD AE BC BD BE CD DE A 1 1 1 0 0 0 0 0 B 1 0 0 1 1 1 0 0 C 0 0 0 1 0 0 1 0 D 0 1 0 0 1 0 1 1 E 0 0 1 0 0 1 0 1 Tabela 6: Construção da matriz de incidência, que relaciona vértices e arestas. conjunto de arestas que suspeitamos que faça parte de um conjunto de cobertura de arestas do grafo fornecido. Construímos um vetor característico, recebendo 1 se a aresta estiver no conjunto e 0 senão. Chamaremos esse vetor de x. Se multiplicarmos B por x, estaremos multiplicando a linha de cada vértice pelo vetor x. Se as arestas que aparecem na coluna da aresta coincidirem com os elementos do nosso vetor, é porque o nosso conjunto tem arestas adjacentes. Porém o resultado final da multiplicação deve nos fornecer um vetor no qual seus valores sejam maiores ou iguais a 1, com isso teremos certeza que todo vértice foi tocado por uma aresta do conjunto. Resumimos os nosso problema da seguinte forma: • Maximizar 1 · x 8
  • 62. • Sujeito a B · x 1 • xj ∈ {0, 1} Onde nesse modelo o 1 representa o vetor formado por 1’s. 6.1 Testando para o subconjunto de arestas {ab, bc, bd}. Tomaremos como vetor característico x = (1, 0, 0, 1, 1, 0, 0, 0) e agora procediremos com a multiplicação B · x:       1 1 1 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 1       ∗             1 0 0 1 1 0 0 0             =       1 3 1 1 0       Nem todo vértice foi tocado, isso é concluído devido ao aparecimento do valor zero. O vértice E não foi tocado. 6.2 Testando para o subconjunto de arestas {ab, cd, de}. Tomaremos como vetor característico x = (1, 0, 0, 0, 0, 0, 1, 1) e agora procediremos com a multiplicação B · x:       1 1 1 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 1       ∗             1 0 0 0 0 0 1 1             =       1 1 1 2 1       Todos os vértices foram tocados, logo o subconjunto é uma cobertura de arestas. 7 O problema das 8 damas consiste em se encontrar um posicionamento para essas peças em um tabuleiro de xa- drez, de tal forma que nenhuma dama ataque outra. Diga a qual conceito, dentre os expostos neste capítulo, este problema corresponde. Procure encontrar por inspeção, uma solução para este problema. O problema se relaciona ao conceito de Conjuntos Dominantes. Por inspeção, uma solução possível é a seguinte: 9
  • 63. Figura 9: O Problema das 8 Damas. 10
  • 64. Teoria dos Grafos - Exercícios do Capítulo 9 Michel Alves dos Santos ∗ Junho de 2011 Conteúdo Lista de Figuras 1 1 Construa um grafo com a sequência de graus (4,4,3,3,3,3): (a) que seja planar, (b) que não seja planar. 1 2 Um grafo é autodual se GD é isomorfo a G. 2 3 Mostre que um grafo planar é bipartido se e só se GD for euleriano. 2 4 A cintura de um grafo, notação g(G) é o comprimento do seu menor ciclo. Mostre que em um grafo planar temos: m [(n − 2)g]/(g − 2) 2 5 (a) Seja G um grafo maximal planar com n > 4. Mostre que os vértices de grau 3, se existirem, formam um subconjunto independente dos vértices de G. (b) Seja G um grafo maximal planar com 5 vértices. Quantas faces triangulares tem G. (c) Seja G no item b. Produzimos um grafo G’, incluindo um vértice de grau 3 em cada face triangular, como sugere a figura a seguir. Quantos vértices tem G’? Quantos vértices de grau 3 tem G’? Mostre que G’ não é hamiltoniano. (d) Adapte a construção mostrada acima e construa um grafo planar maximal sem vértices de grau 3. 4 Lista de Figuras 1 A esquerda grafo planar, a direita grafo não planar. . . . . . . . . . . . . . . . . . . 2 2 Grafo planar maximal sem vértices de grau 3. . . . . . . . . . . . . . . . . . . . . . 4 1 Construa um grafo com a sequência de graus (4,4,3,3,3,3): (a) que seja planar, (b) que não seja planar. Ver figura 1. ∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: mi- chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo- nardo Viana Pereira. 1
  • 65. Figura 1: A esquerda grafo planar, a direita grafo não planar. 2 Um grafo é autodual se GD é isomorfo a G. a) Mostre que se G é autodual então 2n = m + 2 b) Mostre que os grafos roda Rn são autoduais. • a) Se G é autodual, então GD é isomorfo a G, pelo Teorema de Euler, temos que se um grafo G é planar, então f − m + n = 2. Reformulando temos que o número de faces desse grafo é f = m − n + 2. Analisando agora o grafo dual de G, GD , pela definição de dualidade, possui um vértice associado para cada face de G, logo o numero de vértices de GD será igual ao numero de faces de G, como pela hipótese os dois são isomorfos (então possuem o mesmo número de arestas e vértices), se substituirmos f = n em f = m − n + 2, temos 2n = m + 2. Provando o que queríamos. • b) Sabemos que o número de faces de uma Roda Rn será igual ao número de vértices, logo pela definição de dualidade, o grafo GD dual a roda, será também uma roda, pois ela possui o número de faces de uma roda é o seu número de vértices. Dessa forma, o grafo dual da roda é isomórfico à ela, mostrando então que qualquer roda é autodual. 3 Mostre que um grafo planar é bipartido se e só se GD for euleriano. Se GD é euleriano então ele só terá ciclos pares, cada ciclo par corresponde à uma face par em um grafo planar. Se cada face é par no dual de G, então em G cada vértice terá grau par, o que corresponde à todos os ciclos de G serem pares. Pelo teorema de grafo bipartido: um grafo G é bipartido se e somente se não possuir ciclos impares. Como G possui apenas ciclos pares então ele é bipartido. 4 A cintura de um grafo, notação g(G) é o comprimento do seu menor ciclo. Mostre que em um grafo planar temos: m [(n − 2)g]/(g − 2) Para demonstrar tal propriedade devemos recorrer ao conceito de gêneros de superfícies e grafos. O gênero de uma superfície é o número de alças e furos que ela possui; por exemplo, o plano e a esfera têm gênero zero e o toro, gênero 1. O gênero l(G) de um grafo é o da superfície de menor gênero que admita uma imersão de G. Os grafos planares tem portanto gênero zero. A discussão sobre gênero de superfícies e de grafos permite a generalização de diversos resultados de grafos planares para grafos quaisquer. Um desses resultados é exibido a seguir: Teorema 1. (Relação entre Cintura e Gênero) Se a cintura (comprimento do menor ciclo) 2
  • 66. de um grafo G for g(G), então l(G) m 2 1 − 2 g(G) − n 2 + 1 Executando as devidas transformações teremos: l(G) m 2 1 − 2 g(G) − n 2 + 1 l(G) m 2 g(G) g(G) − 2 g(G) − n 2 + 1 l(G) m 2 g(G) − 2 g(G) − n 2 + 1 l(G) m 2 g(G) − 2 g(G) − n 2 + 2 2 l(G) m 2 g(G) − 2 g(G) + 2 − n 2 l(G) m 2 · [g(G) − 2] g(G) + 2 − n 2 l(G) m 2 · [g(G) − 2] g(G) + g(G) g(G) · [2 − n] 2 l(G) m · [g(G) − 2] 2 · g(G) + g(G) · [2 − n] 2 · g(G) l(G) m · [g(G) − 2] + g(G) · [2 − n] 2 · g(G) l(G) · 2 · g(G) m · [g(G) − 2] + g(G) · [2 − n] 2 · l(G) · g(G) m · [g(G) − 2] + g(G) · [2 − n] 2 · l(G) · g(G) m · [g(G) − 2] − g(G) · [n − 2] Como os grafos planares possuem gênero zero, logo: 2 · l(G) · g(G) m · [g(G) − 2] − g(G) · [n − 2] 2 · 0 · g(G) m · [g(G) − 2] − g(G) · [n − 2] 0 m · [g(G) − 2] − g(G) · [n − 2] −m · [g(G) − 2] −g(G) · [n − 2] −m · [g(G) − 2] −g(G) · [n − 2] × (−1) m · [g(G) − 2] g(G) · [n − 2] m (g(G) · [n − 2])/[g(G) − 2] Executando as devidas substituições, que nesse caso seria apenas a troca de notação de g(G) por apenas g, teremos finalmente: m [(n − 2) · g]/(g − 2) 3
  • 67. 5 (a) Seja G um grafo maximal planar com n > 4. Mos- tre que os vértices de grau 3, se existirem, formam um subconjunto independente dos vértices de G. (b) Seja G um grafo maximal planar com 5 vértices. Quantas faces triangulares tem G. (c) Seja G no item b. Produzimos um grafo G’, incluindo um vértice de grau 3 em cada face triangular, como sugere a figura a seguir. Quantos vér- tices tem G’? Quantos vértices de grau 3 tem G’? Mos- tre que G’ não é hamiltoniano. (d) Adapte a construção mostrada acima e construa um grafo planar maximal sem vértices de grau 3. a) b) Para grafo planar maximal temos: m=3n-6, com n=5, temos m=9, aplicando o teorema de euler temos f-m+n=2, substituindo m e n, temos f=6. c) 11 vértices. 6 vértices de grau 3. Ao tentar construir um ciclo hamiltoniano, veremos que sempre vai sobrar ao menos um vértice. Dessa forma, o grafo G’ é não hamiltoniano. d) Solução deste quesito: Figura 2: Grafo planar maximal sem vértices de grau 3. 4