Breno Oliveira
Guilherme Baviera
Motivação - Caminho mínimo
● O caminho mínimo entre os vértices v e w de um grafo G ponderado é aquele cuja
soma dos pesos das arestas tem o menor valor possível dentre todos os caminhos
existentes entre v e w.
Variantes:
● Única fonte: Menor caminho a partir de um vértice para qualquer outro vértice.
● Único destino: Menor caminho entre cada um dos vértices do grafo e um nó de
destino dado.
● Origem-destino: menor caminho entre vértices específicos.
● Todos os pares: menor caminho entre todos os pares de vértices.
Caminho mínimo de Única Fonte
- Dijkstra
- Bellman-Ford (arestas negativas)
- DAG (ordenação topológica)
Questão
Que condições possuem o problema de caminho mínimo que nos permitem resolvê-lo
em partes, a ainda garantir a solução ótima?
Subestrutura ótima de um caminho mínimo
P
Questão
Explique o Algoritmo de Dijkstra e em quais tipos de grafos ele pode ser aplicado.
Ilustre seu funcionamento através de um exemplo.
Algoritmo de Dijkstra
● d[v] - Estimativa de
caminho mais curto (limite
superior) do vértice inicial
até v.
● w[u,v] - Peso da aresta
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
1 Initialize-Single-Source(G,s)
2 S←∅
3 Q = V[G]
4 while Q != ∅
5 do u ← Extract min(Q)
d[v] - Estimativa de caminho mais curto (limite 6 S ← S ∪ {u}
superior) do vértice inicial até v. 7 for each (u, v) ∈ Adj[u]
8 do Relax(u, v,w)
Complexidade - O(V)
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[Ø,∞] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[Ø,∞] [Ø,∞]
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[Ø,∞] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[Ø,∞] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[Ø,∞] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[Ø,∞] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[Ø,∞] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[Ø,∞] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[Ø,∞] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[Ø,∞] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S v0
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[Ø,∞] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[Ø,∞] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S v0
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v0,10] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[Ø,∞] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S v0
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v0,10] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S v0
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v0,10] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S v0
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v0,10] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S v0
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v0,10] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S v0 v2
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v0,10] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S v0 v2
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [Ø,∞] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S v0 v2
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [Ø,∞]
Q v0 v1 v2 v3 v4 v5 S v0 v2
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [Ø,∞] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v2,13] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1 v3
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1 v3
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1 v3
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1 v3
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1 v3
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1 v3 v5
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1 v3 v5
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1 v3 v5
Algoritmo de Dijkstra - Execução
Dijkstra(G,w,s)
[v2,8] [v1,9] 1 Initialize-Single-Source(G,s)
1
v1 v3 2 S←∅
4
3 Q = V[G]
10
4 while Q != ∅
3 8 4 5 do u ← Extract min(Q)
v0 v5
6 S ← S ∪ {u}
[Ø,0] [v4,13] 7 for each (u, v) ∈ Adj[u]
5 6 8 do Relax(u, v,w)
v2 v4
2
[v0,5] [v2,7]
Q v0 v1 v2 v3 v4 v5 S v0 v2 v4 v1 v3 v5
Algoritmo de Dijkstra - Semelhanças
AGM:
[v2,8] [v1,9] Prim escolheria a aresta (v3-v5), para a AGM.
1 Dijkstra é opcional, pois:
v1 v3
10 4
p<v0-v2-v1-v3-v5> = p<v0-v2-v4-v5>
3 8 4
v0 v5
Busca em Largura:
[Ø,0] [v4,13] Na BFS temos que (v0-v1): ‘Distância’ 1
5 6
No caminho mínimo temos que a menor
v2 v4
2 distância entre v0 e v1 é:
[v0,5] [v2,7]
(v0-v2-v1)
Questão
E se tivermos arestas com peso negativos?
Pode?
¯\_(ツ)_/¯
Questão
Em quais situações cotidianas o grupo acha que utilizamos algoritmos de caminho
mínimo com única fonte?
Rotas de caminhos mínimos nos setores
de transportes, priorizando a eficiência
e economia de recursos.
Aplicativos de roteamento de trajetos
urbanos.
O ‘peso’ das arestas podem ser
compostos por distância, fluxo do
trânsito, etc.
Rotas de caminhos
mínimos para pacotes em
redes de computadores.
Pesos podem estar
relacionados com taxa de
transmissão, por exemplo.
Obrigado!
"Ciência da computação tem tanto a ver com o computador como a Astronomia com o
telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência
não estuda ferramentas, mas o que fazemos e o que descobrimos com elas." (Dijkstra)
Bibliografia
Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to
algorithms. MIT press. [Capítulo 24 - Problema do Caminho Mínimo]
http://www.saepro.ufv.br/wp-content/uploads/2010.2.pdf