Você está na página 1de 8

Capı́tulo 3

Circuitos Eulerianos e Hamiltonianos


Edmilson Marmo Moreira
Universidade Federal de Itajubá - UNIFEI
Instituto de Engenharia de Sistemas e Tecnologia da Informação - IESTI

“Felicidade é a certeza de que a nossa vida não está se passando inutilmente”.

É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.

Teorema 1.1 Considerando G um grafo (ou multigrafo) conexo, então:

1. G é euleriano se e somente se todos os vértices em G possuem grau par.

2. G é semieuleriano se e somente se existem exatamente dois vértices de grau


ı́mpar.

3. G é não euleriano se e somente se existem dois ou mais vértices com grau


ı́mpar.

Considere a seguinte demonstração. Ela é semelhante à discussão que foi realizada na


primeira nota de aula deste curso.

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.

Como é fácil de perceber, a identificação se um grafo é euleriano ou semieuleriano


é muito fácil de ser realizada. O código a seguir apresenta uma função em C++ para
verificar se um grafo, representado por sua matriz de adjacências, é um euleriano.

bool euleriano(int G[][MAX_NOS], int ordem)


{
int grauVertice;
for (int i=0; i<ordem; i++) {
grauVertice = 0;
for (int j=0; j<ordem; j++) {
if (G[i][j] != 0)
grauVertice++;
}
if (grauVertice%2 == 1)
return false;
}
return true;
}

Sabendo-se que um grafo é euleriano, um tópico de interesse é determinar um circuito


euleriano neste grafo. Um dos primeiros algoritmos a serem propostos para este problema
foi apresentado por Hierholzer (1873), descrito a seguir.
Um aspecto interessante da prova apresentada anteriormente, é que ela sugere um
algoritmo para identificar um circuito euleriano. Esse algoritmo é conhecido como o
algoritmo de Hierholzer, descrito a seguir.
Teoria dos Grafos - Notas de Aula - Capı́tulo 03 - 3

Algoritmo de Hierholzer – Um grafo (ou multigrafo) G = (V, A) já identificado como


sendo euleriano executa a partir de um vértice v escolhido aleatoriamente.
Inı́cio
Escolher um vértice v em G
Construir um ciclo C, a partir de v, percorrendo as arestas de G de forma aleatória
A1 ← A − C
K ← (V, A1 )
Enquanto A1 6= ∅ faça
Escolher v tal que grau(v) > 0 em K ∧ v ∈ C
Construir um ciclo H, a partir de v, percorrendo as arestas de K de forma aleatória
A1 ← A1 − H
C ←H ∪C
H←∅
Fim enquanto
Imprime C
Fim.

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.

Figura 1: Grafo para exemplificar o algoritmo de Hierholzer


Teoria dos Grafos - Notas de Aula - Capı́tulo 03 - 4

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.

Figura 2: Primeiro circuito extraı́do do grafo pelo algoritmo de Hierholzer

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).

Figura 3: Segundo circuito extraı́do do grafo pelo algoritmo de Hierholzer

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.

2 O Problema do Circuito Hamiltoniano


William Rowan Hamilton (1805-1865) colocou um problema em Teoria dos Grafos
muito semelhante ao de Euler. Hamilton propôs um jogo que denominou “Around de
World ”. O jogo era feito sobre um dodecaedro em que cada vértice estava associado a
uma cidade importante na época. O desafio consistia em encontrar uma rota através
dos vértices do dodecaedro que iniciasse e terminasse em uma mesma cidade, sem nunca
repetir uma visita. Ele questionou se seria possı́vel percorrer um grafo contendo todos os
vértices apenas uma vez.
O grafo correspondente ao jogo de Hamilton é mostrado na figura 4. Uma solução do
jogo, em sua homenagem, passou a ser denominada ciclo hamiltoniano. Ressalta-se que
Hamilton não foi o primeiro a propor esse problema, apesar do problema ter recebido o
seu nome.

Figura 4: Grafo que representa o jogo proposto por Hamilton

Semelhante às definições de um grafo euleriano, um grafo é dito hamiltoniano se


possui um ciclo hamiltoniano. Por sua vez, um grafo é dito semi-hamiltoniano se
possui um caminho hamiltoniano.
Como o problema do caminho euleriano, o problema do circuito hamiltoniano pode
ser resolvido para um determinado grafo por tentativa e erro. O algoritmo é o seguinte:
comece por um vértice do grafo e tente alguns caminhos escolhendo diversos arcos. Se
o caminho resulta em um vértice repetido, não é um ciclo, descarte o caminho e tente
um caminho alternativo. Se o caminho pode ser completado para formar um ciclo, veja
se todos os vértices são visitados; se não, descarte-o e tente um caminho diferente. Isso
vai envolver o armazenamento cuidadoso de informações para não se repetir um caminho
Teoria dos Grafos - Notas de Aula - Capı́tulo 03 - 6

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

2. Verifique se o grafo abaixo é hamiltoniano:

3. Verifique se o grafo de Petersen é hamiltoniano.

4. Verifique se o grafo a seguir pode ser classificado como euleriano e/ou hamiltoniano:

2 3 4

1 5

6 7 8

5. Como obter um circuito hamiltoniano em um grafo completo Kn , com n ≥ 3?

6. Para quais valores de n existe um caminho euleriano em Kn ? Da mesma forma,


para quais valores de n existe um circuito hamiltoniano?

7. Verifique se o grafo abaixo é hamiltoniano. Em caso positivo, encontre um circuito


hamiltoniano de custo mı́nimo:

8. Encontre uma solução para o problema do jogo de Hamilton, apresentado na nota


de aula.
Teoria dos Grafos - Notas de Aula - Capı́tulo 03 - 8

9. Sabendo-se que um grafo hipo-hamiltoniano, definido como se segue, dê um exemplo


de um grafo hipo-hamiltoniano.

Teorema 3.1 Um grafo é hipo-hamiltoniano quando não é hamiltoniano, mas todo


subgrafo formado pela remoção de um único vértice de G é hamiltoniano.

10. Pesquise o que é o “Problema do Carteiro Chinês”. Apresente um exemplo e explique


como é possı́vel resolvê-lo.

11. Pesquise o que é o “Problema do Caixeiro Viajante”. Apresente um exemplo e


explique como é possı́vel resolvê-lo.

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.

GOLDBARG, M.; GOLDBARG, E. Grafos: conceitos, algoritmos e aplicações. 1a. ed.


Rio de Janeiro: Elsevier, 2012.

LIPSCHUTZ, S.; LIPSON, M. Teoria e Problemas de Matemática Discreta. Porto


Alegre: Bookman, 2004. 511 p.

NICOLETTI, M. C. A Cartilha Prolog. São Carlos: EdUFSCar, 2003. 122 p.

ROSEN, K. H. Discrete Mathematics and Its Applications. 5th. ed. New York: McGraw
Hill, 2005.

Você também pode gostar