08 SSSP - Dijkstra
08 SSSP - Dijkstra
Shortest Path
• Tracing the shortest path from a Source
Vertex to all other vertices in graph
• Single Source Shortest Path (SSSP) problem
• Wide applicability – transportation
networks, flow networks
• Two approaches – Dijkstra and Bellman-
Ford
Dijkstra Approach
• Very similar to Prim MST – start from Source
and trace path to all other vertices
• Only variation is Distance calculation
• Distance calculation is now cumulative
• All other conditions remain unchanged
• Works for both Directed and Un-directed
Graphs
Dijkstra Shortest Path Algorithm
Input: Graph G, (AdjMat[x, y]=INFINITY, if edge(x,y) not exist); Source S
Associated Structure: Visited[1..V]
Output: Distance [1..V], Predec [1..v]
Procedure SP-Dijkstra (G, S)
Begin
Repeat for all vertices v in V
Set Distance[v] := INFINITY
Set Visited [v] := FALSE
Set Predec [v] := NULL
End Repeat
Set Distance[S] := 0
Repeat while all vertices not Visited
Set v := get_minimum()//returns vertex with min distance
Set Visited[v] := TRUE
Repeat for all adjacent vertices t of v
If Visited[t] is FALSE and
Distance[t] > Distance[v] + wt[v,t]
Set Distance[t] := Distance[v] + wt[v,t]
Set Predec[t] := v
End If
End Repeat
End Repeat
End 4
Example - 1
A
4 7
3
B 5 6
D C
2 8 9
12
E 14 F
A B C D E F
999 999 999 999 999 999
Distances
-1 -1 -1 -1 -1 -1 Visited
Predecessors
Example - 2
A Source Vertex: A
4 7
3 Initialize Distance of A to 0
B 5 6
C Mark A as Visited
D
2 8 9
12
E 14 F
A B C D E F
0 999 999 999 999 999
Distances
1 -1 -1 -1 -1 -1 Visited
Predecessors
Example - 3
A Source Vertex: A
4 7
3 Adjacent Nodes of A: B, C, D
B 5 6 Prev. Distances of B, C & D : INF
D C
2 Update Distances of B, C, D
8 9
12
Update Predec for B, C, D
E 14 F
A B C D E F
0 4 7 3 999 999
Distances
1 -1 -1 -1 -1 -1 Visited
A A A Predecessors
Example - 4
A Source Vertex: A
4 7
3 Node with min. distance: D
B 5 6 Check Distances of adjacent
D C
nodes via D
2 8 9
12
E 14 F
A B C D E F
0 4 7 3 999 999
Distances
1 -1 -1 1 -1 -1 Visited
A A A Predecessors
Example - 5
A Current Vertex: D
4 7
3 Distance of B via D: 5+3=8
B 5 6 Previous Distance of B: 4
D C
2 No change in Distance of B
8 9
12
E 14 F
A B C D E F
0 4 7 3 999 999
Distances
1 -1 -1 1 -1 -1 Visited
A A A Predecessors
Example - 6
A Current Vertex: D
4 7
3 Distance of C via D: 6+3=9
B 5 6 Previous Distance of C: 7
D C
2 No change for C
8 9
12
E 14 F
A B C D E F
0 4 7 3 999 999
Distances
1 -1 -1 1 -1 -1 Visited
A A A Predecessors
Example - 7
A Current Vertex: D
4 7
3 Distance from E via D: 11
B 5 6 Distance from F via D: 15
D C
A B C D E F
0 4 7 3 11 15
Distances
1 -1 -1 1 -1 -1 Visited
A A A D D Predecessors
Example - 8
A Current Vertex: B
4 7
3 Node with min. distance : B
B 5 6 Check distances of adjacent
D C
nodes from B
2 8 9
12
E 14 F
A B C D E F
0 4 7 3 11 15
Distances
1 1 -1 1 -1 -1 Visited
A A A D D Predecessors
Example - 9
A Current Vertex: B
4 7
3 Prev. Distance of E : 11
B 5 6 Distance of E via B : 4+2=6
D C
A B C D E F
0 4 7 3 6 15
Distances
1 1 -1 1 -1 -1 Visited
A A A B D Predecessors
Example - 10
A Current Vertex: E
4 7
3 Node with min. Distance : E
B 5 6 Distance of F via E: 20
D C
A B C D E F
0 4 7 3 6 15
Distances
1 1 -1 1 1 -1 Visited
A A A B D Predecessors
Example - 11
A Current Vertex: C
4 7
3 Node with min. Distance : C
B 5 6 Distance of F via C: 16
D C
A B C D E F
0 4 7 3 6 15
Distances
1 1 1 1 1 -1 Visited
A A A B D Predecessors
Example - 12
A Current vertex: F
4 7
3 F last node to be processed
B 5 6 All adjacent nodes already done
D C
2 No updates
8 9
12
E 14 F
Distances & Shortest Path from
Source Vertex available
A B C D E F
0 4 7 3 6 15
Distances
1 1 1 1 1 1 Visited
A A A B D Predecessors
Analysis of Dijkstra Algorithm
• Identical to Prim Algorithm:
– Depends on Procedure get_minimum
– If implemented using arrays, O(V2)
– Using Priority Queues, O(E log V)
The End