You are on page 1of 13

SCC0216 - Modelagem Computacional em Grafos

Caminhos Mnimos

Prof. Alneu (alneu@icmc.usp.br ) / Profa. Rosane (rminghim@icmc.usp.br)


PAE: Alan (alan@icmc.usp.br) / Henry (henry@icmc.usp.br)

Baseado no material de aula original: Prof. Josiane M. Bueno


Caminho mnimo

Problema: encontrar o caminho de menor


custo (ou o menor caminho) entre dois
vrtices em um grafo valorado

Algoritmo de Djikstra

Algoritmo de Floyd-Warshall (prx aula)

2
Caminho mnimo

Grafo dirigido G(V,E) com funo peso


w: E que mapeia as arestas em pesos
Peso (custo) do caminho p = <v0, v1, ..., vk>
k
w ( p )= w( v i 1 , v i )
i= 1
Caminho de menor peso entre u e v:

{
p
min {w ( p):u v} se rota de u p/ v
(u,v )=
cc

4
Caminho mnimo

Menor caminho entre os vrtices u e v


definido como qualquer rota p com um peso:

w(p) = (u,v)

5
Subcaminhos de caminhos mais curtos

Dado um grafo orientado ponderado G(V,E)


com funo peso w:ER, seja
p=[v1,...,vi,...,vj,...,vk] o caminho mais curto
de v1 a vk, ento o subcaminho p de vi a vj
o caminho mais curto de vi a vj.
Aresta de peso negativo

Se o grafo no contm nenhum ciclo de peso


negativo acessvel a partir da origem s, ento
para to v em V, o peso do caminho mais
curto (s,v) permanece bem definido, mesmo
tendo um valor negativo. (pois sempre ser
possvel encontrar um caminho menor, que
atravessa o ciclo negativo).
- Um caminho mais curto no pode conter um
ciclo.
Representao do caminho mais curto

- usa-se o predecessor [v]


print_path(G,s,v)
If v= s
then imprimir s
else if p[v]=NIL
then imprimir nenhum caminho de s
para v
else print_path(G,s,p[v])
imprimir v
Relaxamento 2
5 9

Initilize-single-source(G,s) Relax(u,v,w)
for cada vrtice v em V[G] 5 7
do d[v] inf
u v
p[v] NIL
d[s] 0 2
5 6

Relax(u,v,w) Relax(u,v,w)
If d[v] > d[u] + w(u,v) 5 6
then d[v] d[u] + w(u,v)
u v
p[v] u
Algoritmo de Dijkstra

Resolve o problema de caminhos mais curtos


de nica origem em um grafo ponderado
G(V,E), todos os pesos no negativos.
O algoritmo mantm um conjunto S de
vrtices com pesos finais desde a origem s j
computados.
O algoritmo seleciona u em V-S com menor
estimativa de custo
Adiciona u a S e relaxa todas arestas que
saem de u
Menor caminho entre start e start
goal 1
3
p
2 r
q

2 1
s
1

goal
Dijkstra(G,w,s)
S
Q V[G] Cormem, pag
While Q <> 471

do u Extract-Min(Q)
S S {u}
for cada vrtice v em Adj[u]
Relax(u,v,w)
Encontrar o menor caminho entre
Florianpolis e Goinia.

You might also like