// vim: set cindent // vim: ts=4 sw=4 et tw=0 wm=0 #include "shortest_paths.h" #include #include #include #include using namespace std; namespace shortest_paths { // O(n^3) time. Slow, but fool proof. Use for testing. void floyd_warshall( unsigned n, double** D, vector& es, double* eweights) { for(unsigned i=0;i& es, double* eweights) { for(unsigned i=0;i Q(&compareNodes); for(unsigned i=0;iid]=u->d; for(unsigned i=0;ineighbours.size();i++) { Node *v=u->neighbours[i]; double w=u->nweights[i]; if(v->d>u->d+w) { v->p=u; v->d=u->d+w; Q.decreaseKey(v->qnode,v); } } } } void dijkstra( unsigned s, unsigned n, double* d, vector& es, double* eweights) { assert(s < n); std::vector vs(n); dijkstra_init(&vs[0], es, eweights); dijkstra(s, n, &vs[0], d); } void johnsons( unsigned n, double** D, vector& es, double* eweights) { std::vector vs(n); dijkstra_init(&vs[0], es, eweights); for (unsigned k = 0; k < n; k++) { dijkstra(k,n,&vs[0],D[k]); } } }