• Save
Graph Theory - Exercises - Chapters 2, 3, 4, 5, 6, 7, 8, and 9
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

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

  • 700 views
Uploaded on

Some solved exercises of Graph Theory. The reference book used was: "Grafos - Introdução e Prática".

Some solved exercises of Graph Theory. The reference book used was: "Grafos - Introdução e Prática".

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
700
On Slideshare
700
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 28. Lista de Tabelas 5
  • 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