dijkstra_sssp< graph > Class Template Reference

Public Member Functions

 dijkstra_sssp (graph &g, vertex_t source)
 
long long dist_to (vertex_t dest)
 
 dijkstra_sssp (graph &g, vertex &source)
 
int dist_to (vertex &dest)
 

Constructor & Destructor Documentation

template<typename graph >
dijkstra_sssp< graph >::dijkstra_sssp ( graph &  g,
vertex_t  source 
)
44  : G(g), src(source) {
45 
46  const int inf = 1000000000; // A constexpr - evaled at compile-time.
47 
48  // The set E stores our best estimate for the shortest path to each vertex.
49  // The one with the least estimate is transferred to the set S and all the edges leaving it are relaxed
50  set<pair<int, vertex_t>> E; // ordered by distance
51 
52  for(auto it = G.vbegin(); it != G.vend(); it++) {
53  dist[*it] = inf;
54  }
55 
56  dist[source] = 0;
57  E.insert(make_pair(dist[source], source));
58 
59  while(!E.empty()) {
60  pair<int, vertex_t> least = *E.begin();
61  E.erase(*E.begin());
62 
63  int path_len = least.first;
64  vertex_t u = least.second;
65 
66  // TODO : segregate relax procedure
67 
68  // relax all the outbound edges
69  for(auto it = G.aebegin(u); it != G.aeend(u); it++) {
70 
71  vertex_t v = it->to();
72  int wt = it->weight();
73 
74  // Improve estimate
75  if(dist[u] + wt < dist[v]) {
76  typename set<pair<int, vertex_t>>::iterator it;
77  if((it = E.find(make_pair(dist[v], v))) != E.end())
78  E.erase(it);
79  dist[v] = dist[u] + wt;
80  E.insert(make_pair(dist[v], v));
81  }
82  }
83  }
84 
85 }
template<typename graph>
dijkstra_sssp< graph >::dijkstra_sssp ( graph &  g,
vertex &  source 
)

Member Function Documentation

template<typename graph>
int dijkstra_sssp< graph >::dist_to ( vertex &  dest)
82  {
83  return dist[dest];
84 }
template<typename graph >
long long dijkstra_sssp< graph >::dist_to ( vertex_t  dest)
88  {
89  if(dest == src)
90  return 0;
91  else if(dist[dest] == 0 or dist[dest] > 100000000)
92  return -1;
93  return dist[dest];
94 }

The documentation for this class was generated from the following files: