Escolar Documentos
Profissional Documentos
Cultura Documentos
Érico Verı́ssimo
1 Introdução
A nota de aula referente ao capı́tulo 01 apresentou o problema das pontes de Kö-
nigsberg e a solução que foi publicada por Leonhard Euler. Como Euler apresentou uma
solução formal e genérica para o problema de percorrer um grafo passando por cada aresta
uma única vez, este problema ficou conhecido como Caminho de Euler. Neste sentido,
um grafo é dito euleriano se possui uma cadeia fechada (ciclo) que passa por todas as
arestas. Por sua vez, um grafo é dito semieuleriano se possui uma cadeia que passa por
todas as arestas. O teorema seguinte trata das questões associadas a este tipo de grafo.
Demonstração: Ida: Seja G um grafo euleriano. Logo ele contém um circuito euleriano.
Em cada vértice desse caminho, existe uma aresta que chega nesse vértice e outra
que sai desse vértice. Como toda aresta faz parte do caminho, isto é, nenhuma
aresta fica fora do caminho, necessariamente o número de arestas por cada vértice
é par.
1
Teoria dos Grafos - Notas de Aula - Capı́tulo 03 - 2
Volta: Supondo que todos os vértices do grafo G possuem grau par. Seja vi um
vértice do grafo. Busca-se, a partir de vi , construir um caminho que não passa
duas vezes pela mesma aresta, até que não seja possı́vel continuar. Como todos os
vértices possuem um grau par, sempre será possı́vel entrar e sair de um vértice. A
única exceção é o vértice vi onde o caminho vai terminar. Seja C1 este caminho. Se
esse C1 contém todas as arestas de G, tem-se um circuito euleriano. Caso contrário,
retira-se de G todas as arestas que fazem parte de C1 . No grafo resultante G0 , todos
os vértices também possuem grau par e necessariamente um deles faz parte de C1 ,
senão o grafo não seria conexo. Recomeça-se o mesmo processo com o grafo G0 ,
partindo de um vértice comum com C1 , obtendo assim um novo circuito C2 . Dois
circuitos que têm um vértice em comum podem formar um circuito único. A partir
da chegada no vértice comum em um dos dois circuitos, continua-se o percurso no
outro circuito. Este processo é repedido até que, necessariamente, obtém-se um
circuito único que contém todas as arestas de G.
Isso prova o teorema.
Este algoritmo inicia por um vértice v escolhido aleatoriamente e atravessa uma aresta
(v, w) de G. A partir de w, o algoritmo escolhe uma nova aresta, também aleatoriamente.
O processo continua até que v seja encontrado novamente, formando o ciclo C. As arestas
de C são removidas do grafo G. O passo seguinte verifica se A = ∅, situação na qual o
algoritmo termina e uma cadeia euleriana foi encontrada. Caso contrário, um novo ciclo
H é formado a partir de um vértice v, tal que v ∈ C e o grau de v é maior do que 0. Em
cada iteração, o ciclo construı́do na iteração anterior é unido ao ciclo da iteração corrente,
produzindo o ciclo C. No final, C contém um circuito euleriano de G.
Para exemplificar a execução deste algoritmo, considere o grafo da figura 1.
Supondo que o algoritmo comece pelo vértice h. Escolhe-se aleatoriamente uma aresta
nunca visitada a cada vértice visitado, até voltar ao vértice h sem poder mais sair. Por
exemplo, a figura 2 apresenta um circuito obtido, que consiste na sequência h, g, b, a, i, h.
As arestas que definem este caminho (em vermelho) são retiradas do grafo G e, como
sobram arestas não percorridas, deve-se recomeçar a partir de um vértice desse circuito.
Supondo que o vértice i foi escolhido na busca de um novo ciclo, pode-se obter, como
ilustrado na figura 3, o circuito i, g, a, n, i (com arestas em verde).
Combinando esse circuito com o que já tinha sido obtido, tem-se um novo circuito
h, g, b, a, i, g, a, n, i, h. Como esse circuito não cobre o grafo inteiro, é preciso recome-
çar o processo. Assim, escolhe-se um vértice deste circuito, por exemplo, a. Logo, é
encontrado o circuito a, d, c, a, que é, por sua vez, unido ao circuito geral, obtendo-
se: h, g, b, a, d, c, a, i, g, a, n, i, h. Este processo se repete até que todos os vértices te-
Teoria dos Grafos - Notas de Aula - Capı́tulo 03 - 5
nham sido percorridos e se obtenha o circuito euleriano, que, neste exemplo, poderia ser
h, g, b, a, d, c, a, e, s, a, i, k, j, i, g, a, n, i, h.
mais de uma vez. A abordagem de tentativa e erro é, teoricamente, possı́vel, mas, de fato,
impraticável, pois, com exceção de grafos muito pequenos, vão existir várias combinações
de caminhos para examinar.
Como foi visto no inı́cio desta nota de aula, Euler encontrou um algoritmo simples
e eficiente para determinar, para um grafo arbitrário, se existe um caminho euleriano.
Embora o problema do circuito hamiltoniano pareça bastante semelhante ao do caminho
de Euler, existe uma diferença básica. Até o momento, não se encontrou um algoritmo
eficiente para determinar se existe um circuito hamiltoniano. De fato, existe alguma
evidência de que um tal algoritmo nunca será encontrado.
Em determinados tipos de grafos, pode-se determinar facilmente se existe um circuito
hamiltoniano. Por exemplo, um grafo completo com n > 2 vértices tem um circuito
hamiltoniano, porque, para qualquer vértice no caminho, existe sempre um arco para se
ir a qualquer nó não visitado e, finalmente, um arco para se voltar ao ponto de partida.
Em geral, no entanto, não é possı́vel determinar isso facilmente.
Suponha que se está tratando de um grafo com peso. Se existe um circuito hamilto-
niano para o grafo, pode-se encontrar um peso mı́nimo? Esse é o problema do caixeiro-
viajante. Mais uma vez ele pode ser resolvido por tentativa e erro, traçando-se todos os
caminhos possı́veis e guardando-se os pesos dos caminhos que são circuitos hamiltonianos
mas, novamente, esse não é um algoritmo eficiente.
Os circuitos eulerianos e hamiltonianos levantam questões matemáticas interessantes,
mas eles também têm muitas aplicações importantes. Por exemplo, considere um modelo
de grafo para uma rede de estradas (arestas) conectando vários pontos de interesse (vér-
tices). Um gari poderia se interessar por um circuito de Euler, porque este descreveria
uma maneira de percorrer todas as ruas sem que ele precisasse refazer nenhum passo.
Por outro lado, um vendedor que queira uma rota eficiente passando por cada ponto de
interesse poderia achar mais interessante um circuito hamiltoniano.
3 Exercı́cios
1. Simule passo a passo o algoritmo de Hierholzer para encontrar um circuito euleriano
no seguinte grafo:
1 5
3 4 6
Teoria dos Grafos - Notas de Aula - Capı́tulo 03 - 7
4. Verifique se o grafo a seguir pode ser classificado como euleriano e/ou hamiltoniano:
2 3 4
1 5
6 7 8
12. Escreva uma função em C++ para implementar o algoritmo de Hierholzer. Consi-
dere a representação por Matriz de Adjacências.
Referências
GERSTING, J. L. Fundamentos Matemáticos Para a Ciência da Computação. Rio de
Janeiro: Livros Técnicos e Cientı́ficos Editora S.A., 1995. 518 p.
ROSEN, K. H. Discrete Mathematics and Its Applications. 5th. ed. New York: McGraw
Hill, 2005.