• Nie Znaleziono Wyników

Dijkstra

N/A
N/A
Protected

Academic year: 2021

Share "Dijkstra"

Copied!
24
0
0

Pełen tekst

(1)

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

(2)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

g

1

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(3)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(4)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(5)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(6)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(7)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(8)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(9)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(10)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(11)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(12)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(13)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(14)

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

-



6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(15)

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

-



6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(16)

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

-

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

g

2

g

6

g

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(17)

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

-

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

g

2

g

6

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: 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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(18)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

w

g

2

g

6

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: 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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(19)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

w

g

2

g

6

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: 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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(20)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

w

g

2

g

6

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: 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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(21)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

w

g

2

w

g

6

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: 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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(22)

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

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

w

g

2

w

g

6

w

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 / 3

Projekt wspóªnansowany ze ±rodków Unii Europejskiej w ramach Europejskiego Funduszu Spoªecznego

(23)

Algorytm - wyniki

-10



5

?

7

?

20

@

@

@

R

10

-2 4,5

-

6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

w

g

2

w

g

6

w

g

3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 5 13, 5

Po 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

(24)

Algorytm - wyniki

-10



5

?

?

7

?

20

@

@

@

R

10

-2 4,5

-



6

w

g

1

w

g

w

g

w

g

w

g

w

g

s

2 3 4 5 6

w

g

1

w

g

4 5

w

g

w

g

2

w

g

6

w

g

3 w π[w] d[w] 1 ∞ 0 2 1 10 3 5 15 4 1 7 5 4 9 6 5 13, 5

Po 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

Cytaty

Powiązane dokumenty

Program typu aplet zawiera między innymi jeden moduł źródłowy, którego klasa publiczna zawiera między innymi.. podstawowe metody: init(), start(), stop(), paint(), destroy()

Wpisanie tekstu programu korzystającego z argumentów programu i kompilacja Build Project.. Zofia Kruczkiewicz Języki i 27. b) Uruchomienie programu z

Dane drzewo T , należy obliczyć czas potrzebny na przesłanie komunikatów do wszystkich

 - po drugie, ustalenie prawa do OEK zależy także od tego, czy na subkoncie w ZUS znajduje się odpowiednia kwota środków, tj. nie mniejsza od 20-krotności kwoty dodatku

ale wykonywana na rzecz pracodawcy... rozszerza pojęcie pracownika dla celów Artykuł 8 ust. rozszerza pojęcie pracownika dla celów ubezpieczeń społecznych poza sferę stosunku

wywołujące negatywne skutki w organizmie wywołujące negatywne skutki w organizmie pracownika, może być uznane za przyczynę pracownika, może być uznane za przyczynę

Czujniki mechaniczne to czujniki, w których powiązanie przemieszczenia końcówki pomiarowej z odpowiadającym mu przemieszczeniem elementu wskazującego, odbywa się na drodze

Biuro Pielgrzymkowe Arcybiskupstwa Santiago de Compostela (Oficina del Peregrino de Santiago de Compostela) prowadzi dokładne statystyki dotyczące osób, które przybyły