Escolar Documentos
Profissional Documentos
Cultura Documentos
2Q-2016
1
BCC
BMat
1/4
6/11
PI
NI
2/3
7/10
CR
BExp
15/18
TQui
16/17
Obrig
8/9
Optat
13/14
BCC
BMat
1/4
6/11
PI
NI
2/3
7/10
CR
BExp
15/18
TQui
16/17
Obrig
8/9
Optat
13/14
BExp
TQui
Optat
BCC
PI
CR
Obrig
BMat
15/18
16/17
13/14
5/12
6/11
7/10
8/9
1/4
NI
2/3 5
(0)
(2,w)
(3,t)
Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime_caminho(G,s,w)
(2,r)
(1,s)
(2,w)
(3,x)
Imprime_caminho(G,s,s)
(0)
(2,w)
(3,t)
Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime_caminho(G,s,w)
(2,r)
(1,s)
(2,w)
(3,x)
Imprime_caminho(G,s,s)
Imprime s
Caminho= s
(0)
(2,w)
(3,t)
Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime_caminho(G,s,w)
(2,r)
(1,s)
(2,w)
(3,x)
Imprime_caminho(G,s,s)
Imprime s
Caminho= s
(0)
(2,w)
(3,t)
Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime_caminho(G,s,w)
Imprime w
(2,r)
(1,s)
(2,w)
(3,x)
Imprime_caminho(G,s,s)
Imprime s
Caminho= s,w
10
(0)
(2,w)
(3,t)
Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime_caminho(G,s,w)
Imprime w
(2,r)
(1,s)
(2,w)
(3,x)
Imprime_caminho(G,s,s)
Imprime s
Caminho= s,w
11
(0)
(2,w)
(3,t)
Imprime_caminho(G,s,z)
Imprime_caminho(G,s,x)
Imprime x
Imprime_caminho(G,s,w)
Imprime w
(2,r)
(1,s)
(2,w)
(3,x)
Imprime_caminho(G,s,s)
Imprime s
Caminho= s,w,x
12
(0)
(2,w)
(3,t)
Imprime_caminho(G,s,z)
Imprime z
Imprime_caminho(G,s,x)
Imprime x
Imprime_caminho(G,s,w)
Imprime w
(2,r)
(1,s)
(2,w)
(3,x)
Imprime_caminho(G,s,s)
Imprime s
Caminho= s,w,x,z
13
14
Por exemplo:
- Minimizar o custo ou o tempo gasto.
- Maximizar o lucro ou o ganho.
15
16
Vrtices:
Endereos de engrega.
Arestas:
Uma rota conectando 2
endereos de entrega.
Peso/custo:
Distncias entre as
extremidades.
17
18
Vrtices:
Cruzamentos entre ruas.
Arestas:
Cada trecho de rua.
Peso/custo:
Comprimento do trecho (em
quilmetros)
19
Distncia
20
Distncia
Grafos no-ponderados
Distncia entre:
h,e = 3
h,k = Infinito
21
Distncia
Grafos ponderados
Muitas aplicaes associam
um nmero a cada aresta.
h
1
b
5
a
1
d
10
Esse nmero o
custo/peso da aresta, que
pode representar uma
caracterstica fsica da
conexo.
3
e
22
Distncia
Grafos ponderados
h
1
b
5
a
1
d
Distncia entre:
h,k = Infinito
h,e = ?
10
3
e
23
Distncia
Grafos ponderados
h
1
b
5
a
1
d
Distncia entre:
h,k = Infinito
h,e = 8
10
3
e
24
Distncia
Grafos ponderados
h
1
b
5
a
1
d
10
3
e
Distncia entre:
h,k = Infinito
h,e = 8
O comprimento de
um caminho a
soma dos
pesos/custos das
arestas do caminho.
25
26
d(x,z) d(x,y)+d(y,z)
sendo d(i,j) a distncia do vrtice i ao vrtice j.
27
Algoritmo de Dijkstra
Sada:
Caminhos mnimos a partir de s.
28
Algoritmo de Dijkstra
a
10
3
e
6
5
c
d
2
29
Algoritmo de Dijkstra
a.dis
b.dis
c.dis
d.dis
e.dis
{}
1
c
Vrtices
visitados
10
3
iterao
d
2
30
Algoritmo de Dijkstra
0
1
1
a
10
3
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
{a}
10
10
iterao
d
2
31
Algoritmo de Dijkstra
0
1
1
a
10
3
c
6
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
{a}
10
{a,b}
10
10
iterao
d
2
32
Algoritmo de Dijkstra
0
1
1
a
10
3
c
5
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
{a}
10
{a,b}
10
{a,b,d}
iterao
d
2
33
Algoritmo de Dijkstra
0
1
1
a
10
3
c
5
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
{a}
10
{a,b}
10
{a,b,d}
{a,b,d,c}
iterao
d
2
34
Algoritmo de Dijkstra
0
1
1
a
10
3
e
6
5
c
5
iterao
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
{a}
10
{a,b}
10
{a,b,d}
{a,b,d,c}
{a,b,d,c,e}
d
2
35
Algoritmo de Dijkstra
Inicializao:
Atribui uma distncia infinita para todos os vrtices.
O vrtice de origem recebe distncia zero (0).
Todos os vrtices so marcados como no visitados.
Enquanto existir vrtices no visitados:
Determine o vrtice no visitado com a menor distncia (a
partir da origem) como o vrtice atual.
Calcule a distncia para todos os vrtices adjacentes no
visitados:
- Se a distncia menor, substitua a distncia.
- Marque-o como visitado (sua distncia mnima).
Observao: por sempre escolher como prximo vrtice a ser analisado aquele que parece a melhor
opo, o algoritmo chamado de guloso (Greedy)
36
Algoritmo de Dijkstra
2
a
b
4
3
7
3
3
e
d
2
37
Algoritmo de Dijkstra
2
a
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
4
3
iterao
d
2
38
Algoritmo de Dijkstra
2
0
2
a
4
3
iterao
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
{b}
3
c
3
d
2
39
Algoritmo de Dijkstra
2
0
2
a
4
3
iterao
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
{b}
{b,a}
7
3
3
c
3
d
2
40
Algoritmo de Dijkstra
2
0
2
a
4
3
iterao
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
{b}
{b,a}
{b,a,c}
7
3
3
c
3
d
2
41
Algoritmo de Dijkstra
2
0
2
a
4
3
iterao
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
{b}
{b,a}
{b,a,c}
{b,a,c,d}
3
c
3
d
2
42
Algoritmo de Dijkstra
2
0
2
a
4
3
7
3
3
c
3
iterao
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
{b}
{b,a}
{b,a,c}
{b,a,c,d}
{b,a,c,d,e}
d
2
43
Algoritmo de Dijkstra
Dijkstra(G,s,w)
Para cada vrtice v em G
v.dis = INFINITO
v.pre = -1
s.dis = 0
T = todos os vrtices de G
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
Inicializao
Percorre o grafo
44
Algoritmo de Dijkstra
t
10
x
9
4
5
45
Algoritmo de Dijkstra
Inicializao
t
10
iterao
Vrtices
visitados
s.dis
t.dis
x.dis
y.dis
z.dis
{}
9
2
4
5
46
Algoritmo de Dijkstra
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
Se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
10
t
10
x
9
iterao
Vrtices
visitados
s.dis
t.dis
x.dis
y.dis
z.dis
{}
{s}
10
4
5
y
5
47
Algoritmo de Dijkstra
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
Se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
8
t
10
14
x
9
4
5
iterao
Vrtices
visitados
s.dis
t.dis
x.dis
y.dis
z.dis
{}
{s}
10
{s,y}
14
y
5
z
7
48
Algoritmo de Dijkstra
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
Se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
8
t
10
13
x
9
4
5
iterao
Vrtices
visitados
s.dis
t.dis
x.dis
y.dis
z.dis
{}
{s}
10
{s,y}
14
{s,y,z}
13
y
5
z
7
49
Algoritmo de Dijkstra
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
Se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
8
t
10
x
9
4
5
y
5
iterao
Vrtices
visitados
s.dis
t.dis
x.dis
y.dis
z.dis
{}
{s}
10
{s,y}
14
{s,y,z}
13
{s,y,z,t}
z
7
50
Algoritmo de Dijkstra
Enquanto T
VAZIO faa
u = vrtice em T com menor distncia
Se u.dist==INFINITO
Sai do lao
remove u de T
Para cada vizinho v de u
d = u.dist + w(u,v)
Se d<v.dist
v.dist = d
v.pre = u
8
t
10
x
9
4
5
y
5
iterao
Vrtices
visitados
s.dis
t.dis
x.dis
y.dis
z.dis
{}
{s}
10
{s,y}
14
{s,y,z}
13
{s,y,z,t}
{s,y,z,t,x}
7
51
52
Atividade
Questo 1:
Considere um grafo orientado e ponderado que seja
representado pela matriz de adjacncia abaixo.
Simule o algoritmo de Dijkstra e determine as distncias a
todos os vrtices, considerando como origem o vrtice 1.
Faa grficos para mostrar a evoluo do algoritmo.
53
Atividade
Questo 2:
Para cada grafo, simule o algoritmo de Dijkstra e determine
as distncias a todos os vrtices, considerando como
origem o vrtice 1.
1
1
3
5
1
1
1
3
2
2
54