Grafalgo
Library of useful data structures and algorithms
/Users/jst/src/grafalgo/cpp/graphAlgorithms/sPath/dijkstra.cpp
00001 #include "stdinc.h"
00002 #include "Dheap.h"
00003 #include "Wdigraph.h"
00004 
00005 using namespace grafalgo;
00006 
00007 void dijkstra(Wdigraph& dig, vertex u, vertex p[], int d[]) {
00008 // Find a shortest path tree of dig using Dijkstra's algorithm
00009 // and return it in p as an array of parent pointers, with
00010 // d giving the shortest path distances.
00011         vertex v,w; edge e;
00012         Dheap nheap(dig.n(),4);
00013 
00014         for (v = 1; v <= dig.n(); v++) { p[v] = 0; d[v] = Util::BIGINT32; }
00015         d[u] = 0; nheap.insert(u,0);
00016         while (!nheap.empty()) {
00017                 v = nheap.deletemin();
00018                 for (e = dig.firstOut(v); e != 0; e = dig.nextOut(v,e)) {
00019                         w = dig.head(e);
00020                         if (d[w] > d[v] + dig.length(e)) {
00021                                 d[w] = d[v] + dig.length(e); p[w] = v;
00022                                 if (nheap.member(w)) nheap.changekey(w,d[w]);
00023                                 else nheap.insert(w,d[w]);
00024                         }
00025                 }
00026         }
00027         return;
00028 }
 All Classes Files Functions Variables Typedefs Friends