Dijkstra's algorithm code. 
      
      
        - named after its discoverer, Dutch computer scientist Edsger Dijkstra, is a greedy algorithm that solves the single-source shortest path problem for a directed graph with nonnegative edge weights.
 
        - cost d[v] of the shortest path found so far between s and v.
          
            - Initially, this value is 0 for the source vertex s (d[s]=0), 
 
            - Intially, infinity for all other vertices, representing the fact that we do not know any path leading to those vertices (d[v]=∞ for every v in V, except s).
 
           
         
        - Complexity  O(V*V) with implementation here.....
          
            - For sparse graphs, that is, graphs with much less than V*V edges, Dijkstra's algorithm can be implemented more efficiently by storing the graph in the form of adjacency lists and using a binary heap or Fibonacci heap as a priority queue to implement the Extract-Min function. With a binary heap, the algorithm requires O((E+V)logV) time, and the Fibonacci heap improves this to O(E + VlogV).O((E+V)logV) time with heaps 
 
           
         
        - Set S contains all vertices for which we know that the value d[v] is already the cost of the shortest path
 
        - Set Q contains all other vertices. 
 
        - Algorithm Step: Set S starts empty, and in each step one vertex is moved from Q to S. This vertex is chosen as the vertex with lowest value of d[u]. When a vertex u is moved to S, the algorithm relaxes every outgoing edge (u,v).
          
            - relaxation is the process of looking at the vertex v and seeing if we the cost of d[u] + w(u,v) is less than the current d[v].  If this is less than the current d[v], we can replace the current value of d[v] with the new value.
 
               
             
           
         
       
      PseudoCode
      
         
          function Dijkstra(G, w, s)   
     for each vertex v in V[G]                        // Initializations   
           d[v] := infinity   
           previous[v] := undefined                   //this will represent                                                       //chain-path back to s
                                                      //from v that is minimum
  
     d[s] := 0                                        // Distance from s to s   
     S := empty set   
     Q := V[G]                                        // Set of all vertices
while Q is not an empty set                      // The algorithm itself   
           u := Extract_Min(Q)  
           S := S union {u}  
           for each edge (u,v) outgoing from u  
                  if d[u] + w(u,v) < d[v]             // Relax (u,v)  
                        d[v] := d[u] + w(u,v)   
                        previous[v] := u
function  return u = Extract_Min(Q) 
     searches for ertex u in Q that has the smallest d[u] value. 
     remove u from the set Q 
     return u | 
         
       
       
       
       |