Przykªad przebiegu
algorytmu Dijkstry
Autor projektu: dr Andrzej Mróz (UMK)
Projekt pn. Wzmocnienie potencjaªu dydaktycznego UMK w Toruniu w dziedzinach matematyczno-przyrodniczych realizowany w ramach Poddziaªania 4.1.1 Programu Operacyjnego
Kapitaª Ludzki
1 / 3
Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s)
;
Q
:=
V(G)
;
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w);
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6g
1g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 ∞ ∞ 3 ∞ ∞ 4 ∞ ∞ 5 ∞ ∞ 6 ∞ ∞ Q: 1 2 3 4 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u
:=
ExtractMin(Q)
;
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w);
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 ∞ ∞ 3 ∞ ∞ 4 ∞ ∞ 5 ∞ ∞ 6 ∞ ∞ Q: 2 3 4 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 ∞ ∞ 3 ∞ ∞ 4 ∞ ∞ 5 ∞ ∞ 6 ∞ ∞ Q: 2 3 4 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 ∞ ∞ 4 ∞ ∞ 5 ∞ ∞ 6 ∞ ∞ Q: 2 3 4 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 ∞ ∞ 4 ∞ ∞ 5 ∞ ∞ 6 ∞ ∞ Q: 2 3 4 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 ∞ ∞ 4 1 7 5 ∞ ∞ 6 ∞ ∞ Q: 2 3 4 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 ∞ ∞ 4 1 7 5 ∞ ∞ 6 ∞ ∞ Q: 2 3 4 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 ∞ ∞ 4 1 7 5 1 10 6 ∞ ∞ Q: 2 3 4 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u
:=
ExtractMin(Q)
;
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w);
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 ∞ ∞ 4 1 7 5 1 10 6 ∞ ∞ Q: 2 3 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 ∞ ∞ 4 1 7 5 1 10 6 ∞ ∞ Q: 2 3 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 ∞ ∞ 4 1 7 5 4 9 6 ∞ ∞ Q: 2 3 5 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u
:=
ExtractMin(Q)
;
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w);
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 ∞ ∞ 4 1 7 5 4 9 6 ∞ ∞ Q: 2 3 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 ∞ ∞ 4 1 7 5 4 9 6 ∞ ∞ Q: 2 3 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 ∞ ∞ Q: 2 3 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 ∞ ∞ Q: 2 3 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 5 13, 5 Q: 2 3 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u
:=
ExtractMin(Q)
;
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w);
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
w
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 5 13, 5 Q: 3 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
w
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 5 13, 5 Q: 3 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u := ExtractMin(Q);
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w)
;
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
w
g
2g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 5 13, 5 Q: 3 6 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u
:=
ExtractMin(Q)
;
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w);
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
w
g
2w
g
6g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 5 13, 5 Q: 3 u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - przebieg dla s = 1
Dijkstra(G, w, s)
begin
Initialize(G, s);
Q := V(G);
while
Q <> ∅
do
begin
u
:=
ExtractMin(Q)
;
for
ka»dy v ∈ Adj[u]
do
Relax(u, v, w);
end
end
;
Relax(u, v, w)
begin
if
d[v] > d[u] + w(u,v)
then
begin
d[v] := d[u] + w(u,v);
π
[v] := u
end
end
;
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
w
g
2w
g
6w
g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 5 13, 5 Q: u v d[v] d[u] w(u, v) 1 2 ∞ > 0 + 10 1 4 ∞ > 0 + 7 1 5 ∞ > 0 + 10 4 5 10 > 7 + 2 5 3 ∞ > 9 + 6 5 6 ∞ > 9 + 4, 5 2 1 0 < 10 + 5 2 5 9 < 10 + 20 6 − 3 − 2 / 3Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - wyniki
-10 5?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
w
g
2w
g
6w
g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 5 13, 5Po zako«czeniu dziaªania algorytmu
w wektorze π s¡ zakodowane najkrótsze drogi z s = 1 do
poszczególnych wierzchoªków (poprzez system poprzedników),
w wektorze d s¡ zakodowane ich dªugo±ci.
I tak np. najkrótsza droga z 1 do 3 to: 1 → 4 → 5 → 3, o dª. 15.
Dokªadniejsze omówienie algorytmu patrz wykªad.
3 / 3
Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego
Algorytm - wyniki
-10 5?
?
7?
20@
@
@
R
10 -2 4,5-
6w
g
1w
g
w
g
w
g
w
g
w
g
s
2 3 4 5 6w
g
1w
g
4 5w
g
w
g
2w
g
6w
g
3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 5 13, 5Po zako«czeniu dziaªania algorytmu
w wektorze π s¡ zakodowane najkrótsze drogi z s = 1 do
poszczególnych wierzchoªków (poprzez system poprzedników),
w wektorze d s¡ zakodowane ich dªugo±ci.
I tak np. najkrótsza droga z 1 do 3 to: 1 → 4 → 5 → 3, o dª. 15.
Dokªadniejsze omówienie algorytmu patrz wykªad.
3 / 3
Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego