ROBERT SEDGEWICK | KEVIN WAYNE
F O U R T H E D I T I O N
Algorithms
http://algs4.cs.princeton.edu
Algorithms
ROBERT SEDGEWICK | KEVIN WAYNE
Algorithms R OBERT S EDGEWICK | K EVIN W AYNE D IJKSTRA ' S A - - PowerPoint PPT Presentation
Algorithms R OBERT S EDGEWICK | K EVIN W AYNE D IJKSTRA ' S A LGORITHM D EMO Algorithms F O U R T H E D I T I O N R OBERT S EDGEWICK | K EVIN W AYNE http://algs4.cs.princeton.edu Dijkstra's algorithm demo Consider vertices in increasing
ROBERT SEDGEWICK | KEVIN WAYNE
F O U R T H E D I T I O N
http://algs4.cs.princeton.edu
ROBERT SEDGEWICK | KEVIN WAYNE
(non-tree vertex with the lowest distTo[] value).
2
4 7 1 3 5 2 6 s 6 9 8 4 5 7 1 5 4 15 3 12 20 13 11 9 an edge-weighted digraph 0→1 5.0 0→4 9.0 0→7 8.0 1→2 12.0 1→3 15.0 1→7 4.0 2→3 3.0 2→6 11.0 3→6 9.0 4→5 4.0 4→6 20.0 4→7 5.0 5→2 1.0 5→6 13.0 7→5 6.0 7→2 7.0
(non-tree vertex with the lowest distTo[] value).
3
4 7 1 3 5 2 6 choose source vertex 0 v distTo[] edgeTo[] 0 0.0 - 1 2 3 4 5 6 7
(non-tree vertex with the lowest distTo[] value).
4
4 7 1 3 5 2 6 relax all edges pointing from 0 9 8 5
∞ ∞ ∞
v distTo[] edgeTo[] 0 0.0 - 1 2 3 4 5 6 7
(non-tree vertex with the lowest distTo[] value).
∞
5
4 7 1 3 5 2 6 relax all edges pointing from 0 9 8 5 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 3 4 9.0 0→4 5 6 7 8.0 0→7
∞
5
∞
8 9
(non-tree vertex with the lowest distTo[] value).
6
4 7 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 3 4 9.0 0→4 5 6 7 8.0 0→7 1
(non-tree vertex with the lowest distTo[] value).
7
4 7 1 3 5 2 6 choose vertex 1 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 3 4 9.0 0→4 5 6 7 8.0 0→7
(non-tree vertex with the lowest distTo[] value).
8
4 7 1 3 5 2 6 relax all edges pointing from 1 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 3 4 9.0 0→4 5 6 7 8.0 0→7 4 15 12 5
∞ ∞
8
(non-tree vertex with the lowest distTo[] value).
9
4 7 1 3 5 2 6 relax all edges pointing from 1 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 17.0 1→2 3 20.0 1→3 4 9.0 0→4 5 6 7 8.0 0→7 4 15 12 ✔
∞ ∞
5 17 20 8
(non-tree vertex with the lowest distTo[] value).
10
4 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 17.0 1→2 3 20.0 1→3 4 9.0 0→4 5 6 7 8.0 0→7 7
(non-tree vertex with the lowest distTo[] value).
11
4 7 1 3 5 2 6 choose vertex 7 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 17.0 1→2 3 20.0 1→3 4 9.0 0→4 5 6 7 8.0 0→7
(non-tree vertex with the lowest distTo[] value).
∞
12
4 7 1 3 5 2 6 relax all edges pointing from 7 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 17.0 1→2 3 20.0 1→3 4 9.0 0→4 5 6 7 8.0 0→7 6 7 8 17
(non-tree vertex with the lowest distTo[] value).
13
4 7 1 3 5 2 6 relax all edges pointing from 7 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 15.0 7→2 3 20.0 1→3 4 9.0 0→4 5 14.0 7→5 6 7 8.0 0→7 6 7 8 17
∞
14 15
(non-tree vertex with the lowest distTo[] value).
14
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 15.0 7→2 3 20.0 1→3 4 9.0 0→4 5 14.0 7→5 6 7 8.0 0→7
(non-tree vertex with the lowest distTo[] value).
15
4 7 1 3 5 2 6 select vertex 4 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 15.0 7→2 3 20.0 1→3 4 9.0 0→4 5 14.0 7→5 6 7 8.0 0→7
(non-tree vertex with the lowest distTo[] value).
16
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 15.0 7→2 3 20.0 1→3 4 9.0 0→4 5 14.0 7→5 6 7 8.0 0→7 relax all edges pointing from 4 4 5 20 8 14 9
∞
(non-tree vertex with the lowest distTo[] value).
17
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 15.0 7→2 3 20.0 1→3 4 9.0 0→4 5 13.0 4→5 6 29.0 4→6 7 8.0 0→7 relax all edges pointing from 4 4 5 20 ✔
∞
29 8 14 9 13
(non-tree vertex with the lowest distTo[] value).
18
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 15.0 7→2 3 20.0 1→3 4 9.0 0→4 5 13.0 4→5 6 29.0 4→6 7 8.0 0→7
(non-tree vertex with the lowest distTo[] value).
19
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 15.0 7→2 3 20.0 1→3 4 9.0 0→4 5 13.0 4→5 6 29.0 4→6 7 8.0 0→7 select vertex 5
(non-tree vertex with the lowest distTo[] value).
20
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 15.0 7→2 3 20.0 1→3 4 9.0 0→4 5 13.0 4→5 6 29.0 4→6 7 8.0 0→7 relax all edges pointing from 5 1 13 29 13 15
(non-tree vertex with the lowest distTo[] value).
21
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 20.0 1→3 4 9.0 0→4 5 13.0 4→5 6 26.0 5→6 7 8.0 0→7 relax all edges pointing from 5 1 13 29 13 15 14 26
(non-tree vertex with the lowest distTo[] value).
22
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 20.0 1→3 4 9.0 0→4 5 13.0 4→5 6 26.0 5→6 7 8.0 0→7
(non-tree vertex with the lowest distTo[] value).
23
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 20.0 1→3 4 9.0 0→4 5 13.0 4→5 6 26.0 5→6 7 8.0 0→7 select vertex 2
(non-tree vertex with the lowest distTo[] value).
24
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 20.0 1→3 4 9.0 0→4 5 13.0 4→5 6 26.0 5→6 7 8.0 0→7 relax all edges pointing from 2 3 11 26 14 20
(non-tree vertex with the lowest distTo[] value).
25
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 17.0 2→3 4 9.0 0→4 5 13.0 4→5 6 25.0 2→6 7 8.0 0→7 relax all edges pointing from 2 3 11 26 14 20 17 25
(non-tree vertex with the lowest distTo[] value).
26
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 17.0 2→3 4 9.0 0→4 5 13.0 4→5 6 25.0 2→6 7 8.0 0→7
(non-tree vertex with the lowest distTo[] value).
27
4 7 1 3 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 17.0 2→3 4 9.0 0→4 5 13.0 4→5 6 25.0 2→6 7 8.0 0→7 select vertex 3
(non-tree vertex with the lowest distTo[] value).
28
4 7 1 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 17.0 2→3 4 9.0 0→4 5 13.0 4→5 6 25.0 2→6 7 8.0 0→7 relax all edges pointing from 3 9 3 25 20
(non-tree vertex with the lowest distTo[] value).
29
4 7 1 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 17.0 2→3 4 9.0 0→4 5 13.0 4→5 6 25.0 2→6 7 8.0 0→7 relax all edges pointing from 3 9 ✔ 3 25 20
(non-tree vertex with the lowest distTo[] value).
30
4 7 1 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 17.0 2→3 4 9.0 0→4 5 13.0 4→5 6 25.0 2→6 7 8.0 0→7 3
(non-tree vertex with the lowest distTo[] value).
31
4 7 1 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 17.0 2→3 4 9.0 0→4 5 13.0 4→5 6 25.0 2→6 7 8.0 0→7 3 select vertex 6
(non-tree vertex with the lowest distTo[] value).
32
4 7 1 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 17.0 2→3 4 9.0 0→4 5 13.0 4→5 6 25.0 2→6 7 8.0 0→7 3 relax all edges pointing from 6
(non-tree vertex with the lowest distTo[] value).
33
4 7 1 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 17.0 2→3 4 9.0 0→4 5 13.0 4→5 6 25.0 2→6 7 8.0 0→7 3
(non-tree vertex with the lowest distTo[] value).
34
4 7 1 5 2 6 v distTo[] edgeTo[] 0 0.0 - 1 5.0 0→1 2 14.0 5→2 3 17.0 2→3 4 9.0 0→4 5 13.0 4→5 6 25.0 2→6 7 8.0 0→7 3 shortest-paths tree from vertex s s