Você está na página 1de 4

Aula 5 – 30/08

Menor caminho entre dois vértices

O problema do caminho mínimo ou caminho mais curto, consiste em encontrar o


melhor caminho entre dois vértices. Assim, resolver este problema pode significar
determinar o caminho entre dois vértices com o custo mínimo, ou o menor tempo de
viagem.

Numa rede qualquer, dependendo das suas características, podem existir vários
caminhos entre um par de vértices, definidos como origem e destino. Entre os vários
caminhos aquele que possui o menor peso é chamado caminho mínimo. Este peso
representa a soma total dos valores dos arcos que compõem o caminho e estes valores
podem ser tempo de viagem, distância, ou outro custo qualquer.

Algoritmo de Dijkstra

O algoritmo de Dijkstra, criado em 1956 e publicado em 1959, é uma solução


para o problema de caminho mínimo. Funciona em grafos orientados e não orientados,
no entanto, todas as arestas devem ter custos não negativos.

Algoritmo que calcula, o caminho mais curto, em termos de peso total das arestas,
entre um nó inicial e todos os demais nós do grafo. O peso total das arestas é a soma dos
pesos das arestas que compõe o caminho.

Etapas:

-Escolha um vértice como origem;

-Atribua valor zero ao custo do vértice de origem e infinito para os demais;

-Atribua um valor qualquer para os predecessores;

-Enquanto houver vértice aberto:

 Seja u um vértice aberto cuja estimativa seja menor dentre todos os


vértices abertos;
 Feche o nó u
 Para todo vértice j ainda aberto na adjacência de u faça:
- some a estimativa do vértice u com custo do arco que une u a j;
1
- caso esta soma seja melhor que a estimativa anterior para o nó j,
substitua-a e anote u como predecessor de j.

Exemplos:

1) Escolhendo 𝑣0 como vértice inicial:

2) Escolhendo 𝑣3 como vértice inicial:

2
Problema do carteiro chinês

O problema do carteiro chinês consiste em encontrar um caminho que passe por


todas as arestas o grafo G(V,E) pelo menos uma vez, de preferência uma única vez.
Uma solução para este problema é quando o grafo é de Euler. Neste caso, o
caminho pode ser achado utilizando o algoritmo de Fleury. ( Aula 4)
Se o grafo não for de Euler, então algumas arestas terão de ser repetidas. O
problema consiste em encontrar, por duplicação de arestas, um supergrafo G* de modo a
minimizar a soma dos pesos das arestas duplicadas.

Exemplo: Vamos supor que 𝑣1 seja o correio central. Carteiro deve sair de 𝑣1 , entregar
todas as cartas e voltar para 𝑣1 andando o mínimo possível.

-Transformar G em G*

-Aplicando Dijkstra encontramos o menor caminho entre 𝑣3 e 𝑣4 ( exemplo anterior)

-Incluímos estas arestas no grafo que agora é de Euler.

3
Caso geral:

Quando os número de vértices de grau ímpar é maior que 2, a solução envolve


subproblemas como encontrar um emparelhamento perfeito. Neste caso a solução
envolve as seguintes etapas:

- encontrar caminhos mínimos entre todos os pares de vértices ímpares;

- Supondo n vértices ímpares, montar um grafo Kn em que o peso das arestas é o peso de
cada caminho

- Encontrar o emparelhamento perfeito no grafo completo em questão

Exemplo: Neste caso tem-se 4 vértices de grau ímpar: {a,b,d,e}

Exercício: Resolva o problema do carteiro chinês para o grafo seguinte:

Você também pode gostar