# Dijkstra's Algorithm

Dijkstra's Algorithm is a procedure to find shortest paths from a given vertex s in a graph G to all other vertices. The algorithm incrementally builds a sub-graph of G which is a tree containing shortest paths from s to every other vertex in the tree. A step of the algorithm consists of determining which vertex to add to the tree next.

Basic structures needed:

1. The graph to be analysed. Denote it by G = (V,E), where V is the vertex set and E is the edge set.
2. The tree T which is incrementally built, which can also be stored as a graph. Denote it by T = (S,A), where S is the vertex set and A is the edge set. Note that T is a subgraph of G.
3. A priority queue in which each element is an edge (u,v) where u is in S and v is in V - S. The edge (u,v) has an associated value equal to the length of (u,v) plus the length of the path from s to u in T.
The algorithm proceeds as follows:
```T is the empty graph;
PQ is an empty priority queue;
Add s to T; mark s as visited in G;
Add each edge (s,v) of G to PQ with appropriate value
while (T.size() < G.size() and PQ not empty)
do
nextEdge = PQ.removeMin();
until(one vertex of nextEdge is visited and the other is unvisited)
or until there are no more edges in PQ

// assume nextEdge = (v,u) where v is visited (in T) and u is
unvisited (not in T)

Add u to T; mark u as visited in G;