Professional Documents
Culture Documents
1
u2 6 5 L=7 L=8
L=3 L=
2
u3 3 L=6 L=
L=5 L=
3
u4 9 7 L L=11 =12 L= 7 u9 3 1 L=10 L= 11 4 2 9 L=13 L =14 L= 8 u10
2 L=0 4 u0 1 8
5 u6 7 2 L=1 L= 9
6 u5 4 L L=9 =10 L=
u1
C++ - Dijkstra e Prim
10
u7
u8
2/13
Anlise
1 2 3
u0= 4
2 3 5 0 7
4e1? 4e2?
4 e 11 ? 4 e 10 ? 4e8?
Resposta: 2
Resposta: 3
Resposta: 10 Resposta: 9 Resposta: 13
L=
6 7 8 9 10 11
6 11 13 1 9 10
3/13
O Caminho do 4 at o 8
Comprimento Acumulado
L=5, L=, A A= =2 0
3
u4 7 9 L = 11, =11 L= =12 , A= 0 2 L L= =14 =13 , A= 0 3 7 2 7 8 u9 3 11 1 L= L =10 , A= 0 10 4 u10
Vrtice Anterior
2 L=0, A=0 4 u0 1 8
7 9
4 L=10 L= , A 9, A= =5 0 9 10
L=1, , A= =4 0
u1
C++ - Dijkstra e Prim
u7
u8
4/13
Anlise
1 2 4 1 Qual caminho possui distncia mnima entre os vrtices: 4e8? 4e2? Resposta: 8, 7, 11, 10, 5, 6, 2, 1, 4 Resposta: 2, 1, 4
A=
3 2 u0= 4 0 5 6 6 2 7 11 8 7 9 4 10 5 11 10
5/13
1 2 3 4
4 1 2 0 6 2 11 7
2 3 6
3 9 7 7
A=
5 6 7
9
10 11
4
5 10
4 9
3 1
9
C++ - Dijkstra e Prim
10
11
6/13
1
0 1 0
2
1 0 2
3
0 2 0
4
2 0 0
5
6 5 0
6
0 3 0
7
0 9 7
9
0 0 0
10
0 0 0
11
0 0 0
4
5 6 7
2
6 0 0
0
5 3 9
0
0 0 7
0
8 0 0
8
0 1 0
0
1 0 6
0
0 6 0
0
0 0 2
1
7 0 0
0
2 4 3
0
0 0 1
8
9 10 11
0
0 0 0
0
0 0 0
9
0 0 0
0
1 0 0
0
7 2 0
0
0 4 0
2
0 3 1
0
0 0 4
0
0 9 0
0
9 0 1
4
0 1 0
7/13
L A M 2 4 0 F T 1 2 3 1 F 0 T 3 5 2 0 4 0 0 8 0 4 7 6 5 6 2 0 6 11 11 12 2 0 7 13 14 7 3 0 8 4 1 0 9 10 5 0 9 9 10 T F T F T F T F T F T F
2 L=0, A=0
4 u0 1 8
6 5 L= 8, 7, , A=4 6 0
5 u6 7 2 L= 1,, A=4 0 9 u1 9 1
3 L= L=6 , A=2 0
6 u5 4 L L= =10 9,, A= =5 0 9 10 u7 1 6
9
L L= =14 =13 , A=0 3 7 8 u10 4
1 L L= =10 ,, A= =10 0 11 u8
T F T F 10 10 0 F T 11
8/13
incio V = {1, 2, ..., n} obter o vrtice inicial u0 V e o vrtice final uf V M = {u0} D=V-M L(u0) = 0 A(u0) = 0 L(v) = A(v) = 0 "vD i=0
fim
L(u0) a distncia acumulada at u0 e A(u0) o vrtice anterior a u0 neste caso 0 significa que no h um vrtice anterior. Os vrtices desmarcados recebem a distncia acumulada e no possuem vrtice anterior (simbolizado por ter o valor A(v) nulo).
sim
v = u0
n vrtices.
ui uf
sim
no
C = () v = uf
no
L(v) = mnimo(L(v), L(ui) + w(ui, v)) A(v) = ui "vD e a(ui, v) 0 ui+1 | L(ui+1) = mnimo(L(v)) "vD M = M {ui+1} i=i+1
v u0 e A(v) 0
sim
C = C + (v) v = A(v)
n i 1 comparaes.
9/13
Comparaes
c = n(n-1)
Total
0(n2)
C++ - Dijkstra e Prim Prof. Lincoln Cesar Zamboni
10/13
Algoritmo de Prim
L= 2 A=4 A=0
Distncia
2 A=2 L= A=0 3 u4
u2 2 L=0 A=0
4 u0 1 7 9 u1
C++ - Dijkstra e Prim
3 9 7 9 L= A=0 L=3 A=2 L=9 L=4 A=7 A=11 A=3 A=11 A=0 L=1 L= A=0 L=2 9 A=2 L=3 7 A=3 A=10 6 A=6 6 2 6 7 8 u5 u9
4
u10
4 3 1 L=4 A=6 L= A=0 L= A=0 L=2 L=9 A=5 A=9 L=1 A=10 10 u7
11
u8
11/13
1 2 3 4
4 1 2 0 6 2 11 7
2 3 6
3 9 7 7
A=
5 6 7
9
10 11
4
5 10
4 9
3 1
4 tot = 16
12/13
9
C++ - Dijkstra e Prim
10
11
Prim
incio V = {1, 2, ..., n} M = {u0} D=V-M L(u0) = 0 A(u0) = 0 L(v) = A(v) = 0 "vD i=0
fim
Os vrtices V foram numerados a partir do nmero 1.
M o conjunto dos vrtices Marcados e D o dos Desmarcados. L(u0) a distncia acumulada at u0 e A(u0) o vrtice anterior a u0 neste caso 0 significa que no h um vrtice anterior. Os vrtices desmarcados recebem a distncia e no possuem vrtice anterior (simbolizado por ter o valor A(v) nulo). T inicializada com a seqncia ordenada nula ().
sim
D
sim
no
L(v) = mnimo(L(v), w(ui, v)) A(v) = ui "vD e a(ui, v) 0 ui+1 | L(ui+1) = mnimo(L(v)) "vD M = M {ui+1} i=i+1
Expanso da rvore. a(ui, v) representa a adjacncia entre ui e v. Busca do vrtice desmarcado com distncia mnima.
vne A(v) 0
sim
13/13