Grafalgo
Library of useful data structures and algorithms
|
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 }