Académique Documents
Professionnel Documents
Culture Documents
Aulas passadas
Inicializao
Percorre o grafo
Explora os vizinhos de u
VisitaDFS(G,s):
tempo = tempo+1
s.t1 = tempo
s.cor = CINZA
Para cada v em G.Adj[s] faa
Se v.cor == BRANCO
VisitaDFS(G,v)
s.cor = PRETO
tempo = tempo+1
s.t2 = tempo
Inicializao
Percorre o grafo
Busca em profundidade
Verso recursiva 1
Inicializao
Percorre o grafo
Busca em profundidade
Verso recursiva 2
10
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
11
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/312
13
(3) 7
(2) 2
(2)
(1)
(1)
(2)
(0)
origem
14
15
Por exemplo:
- Minimizar o custo ou o tempo gasto.
- Maximizar o lucro ou o ganho.
16
Vrtices:
Endereos de engrega.
Arestas:
Uma rota conectando 2
endereos de entrega.
Peso/custo:
Distncias entre as
extremidades.
18
Vrtices:
Cruzamentos entre ruas.
Arestas:
Cada trecho de rua.
Peso/custo:
Comprimento do trecho (em
kilometros)
23
Distncia
24
Distncia
Grafos no-ponderados
Distncia entre:
h,e = 3
h,k = Infinito
25
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 ser remetido a uma
caracterstica fsica da
conexo.
3
e
26
Distncia
Grafos ponderados
h
1
b
5
a
1
d
Distncia entre:
h,k = Infinito
h,e = ?
10
3
e
27
Distncia
Grafos ponderados
h
1
b
5
a
1
d
Distncia entre:
h,k = Infinito
h,e = 8
10
3
e
28
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.
29
30
d(x,z) d(x,y)+d(y,z)
sendo d(i,j) a distncia do vrtice i ao vrtice j.
31
Algoritmo de Dijkstra
Sada:
Caminhos mnimos a partir de s.
32
Algoritmo de Dijkstra
a
10
3
e
6
5
c
d
2
33
Algoritmo de Dijkstra
a.dis
b.dis
c.dis
d.dis
e.dis
{}
1
c
Vrtices
visitados
10
3
iterao
d
2
34
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
35
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
36
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
37
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
38
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
39
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 houverem vrtices no visitados:
Eleja o vrtice no visitado com a menor distncia (a partir da
origem) como o vrtice atual.
Calcule a distncia para todos os vrtices adjacntes 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)
40
Algoritmo de Dijkstra
2
b
a
4
3
7
3
3
c
d
2
41
Algoritmo de Dijkstra
2
b
Vrtices
visitados
a.dis
b.dis
c.dis
d.dis
e.dis
{}
4
3
iterao
d
2
42
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
43
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
44
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
45
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
46
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
47
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
48
Algoritmo de Dijkstra
t
10
x
9
4
5
49
Algoritmo de Dijkstra
Inicializao
t
10
iterao
Vrtices
visitados
s.dis
t.dis
x.dis
y.dis
z.dis
{}
9
2
4
5
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
10
1
t
10
x
9
iterao
Vrtices
visitados
s.dis
t.dis
x.dis
y.dis
z.dis
{}
{s}
10
4
5
y
5
51
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
14
1
t
10
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
52
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
13
1
t
10
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
53
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
9
1
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
54
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
9
1
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
55
56
Algoritmo de Floyd-Warshall
FloydWarshall(MAdj):
D = Madj
para cada linha i em MAdj
para cada coluna j em MAdj
se (Madj[i,j]==0 e i!=j) // sem conexo?
dist[i,j] = INFINITO
N = numero de linhas de MAdj
para k igual a 1 at N
para i igual a 1 at N
para j igual a 1 at N
se D[i,j] > D[i,k]+D[k,j]
D[i,j] = D[i,k]+D[k,j]
57
Algoritmo de Floyd-Warshall
Matriz de adjacncia
5
1
3
1
10
1
2
3
4
5
3 4
10
10
Algoritmo de Floyd-Warshall
Matriz de distncias (D)
5
1
3
1
10
1
2
3
4
5
3 4
10
10
59
Algoritmo de Floyd-Warshall
1
2
3
4
5
1
2
3
4
5
3 4
10
10
3 4
10
10
K=1
...
60
Algoritmo de Floyd-Warshall
1
2
3
4
5
1
2
3
4
5
3 4
10
10
K=2
3 4
10
10
...
61
Algoritmo de Floyd-Warshall
1
2
3
4
5
1
2
3
4
5
3 4
10
10
3 4
10
10
K=3
...
62
Algoritmo de Floyd-Warshall
1
2
3
4
5
3 4
10
10
3 4
1 0 4 3 2 12
2 4 0 1 2 12
3 3 1 0 1 11
4 2 2 1 0 10
5 12 12 11 10 0
K=4
D[1,2]=2+2=4
D[1,3]=2+1=3
D[1,5]=2+10=12
D[2,1]=2+2=4
D[2,5]=2+10=12
D[3,1]=1+2=3
D[3,5]=1+10=11
63
Algoritmo de Floyd-Warshall
1
3 4
1 0 4 3 2 12
2 4 0 1 2 12
3 3 1 0 1 11
4 2 2 1 0 10
5 12 12 11 10 0
1
3 4
K=5
No houveram modificaes
1 0 4 3 2 12
2 4 0 1 2 12
3 3 1 0 1 11
4 2 2 1 0 10
5 12 12 11 10 0
64
Algoritmo de Floyd-Warshall
3 4
1 0 4 3 2 12
2 4 0 1 2 12
3 3 1 0 1 11
4 2 2 1 0 10
5 12 12 11 10 0
5
1
3
1
10
65
Pginas interessantes
All Minimum Routs Finder (Floyd Algorithm)
http://students.ceid.upatras.gr/~papagel/english/java_docs/allmin.htm
66
Lista 2
Enunciado no Tidia->Repositrio->Listas->Lista 2->CR-lista02.pdf
PARTE 1: Isomorfismo de grafos
PARTE 2:
- Busca em profundidade
- Caminhos mnimos (algoritmo de Dijkstra)
- rvore geradora mnima atravs do algoritmo de Prim (lembra
Dijkstra)
67
Lista 2
Submisso:
Envie as respostas atravs do seguinte formulrio:
https://docs.google.com/forms/d/1sq-qnZnb3DrUxGxurLRMP7sND3VOTW7lfniDtRCYPFQ/viewform
Observaes:
Pode submeter inmeras vezes, apenas a ltima submisso ser avaliada.
Data limite: 23 de junho s 23:55
68
69
Atividade Prtica
Questo nica:
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
70
Atividade Prtica
1
1
3
5
1
1
1
3
2
2
71
72