Cosmetics.
authorFrancois Fleuret <francois@fleuret.org>
Thu, 30 Aug 2012 06:47:45 +0000 (08:47 +0200)
committerFrancois Fleuret <francois@fleuret.org>
Thu, 30 Aug 2012 06:47:45 +0000 (08:47 +0200)
mtp_graph.cc

index d3b921b..052de17 100644 (file)
@@ -49,9 +49,11 @@ public:
   scalar_t distance_from_source;
   Edge *pred_edge_toward_source;
 
-  int iteration; // Used in find_shortest_path to know if we already
-                 // added this vertex to the front
+  int last_change; // Used to mark which edges have already been
+                   // processed in some methods
+
   Vertex();
+
   inline void add_leaving_edge(Edge *e);
   inline void del_leaving_edge(Edge *e);
 };
@@ -60,7 +62,7 @@ public:
 
 void Edge::invert() {
   length = - length;
-  positivized_length = 0;
+  positivized_length = - positivized_length;
   origin_vertex->del_leaving_edge(this);
   terminal_vertex->add_leaving_edge(this);
   Vertex *t = terminal_vertex;
@@ -210,7 +212,7 @@ int MTPGraph::is_dag() {
 
   // We put everybody in the front
   for(int k = 0; k < _nb_vertices; k++) {
-    _vertices[k].iteration = 0;
+    _vertices[k].last_change = -1;
     _front[k] = &_vertices[k];
   }
 
@@ -218,14 +220,12 @@ int MTPGraph::is_dag() {
   int front_size = _nb_vertices, pred_front_size;
 
   do {
-    iteration++;
-
     // We set the iteration field of all vertex with incoming edges to
     // the current iteration value
     for(int f = 0; f < front_size; f++) {
       v = _front[f];
       for(e = v->leaving_edges; e; e = e->next_leaving_edge) {
-        e->terminal_vertex->iteration = iteration;
+        e->terminal_vertex->last_change = iteration;
       }
     }
 
@@ -235,10 +235,12 @@ int MTPGraph::is_dag() {
     // We remove all the vertices without incoming edge
     for(int f = 0; f < pred_front_size; f++) {
       v = _front[f];
-      if(v->iteration == iteration) {
+      if(v->last_change == iteration) {
         _front[front_size++] = v;
       }
     }
+
+    iteration++;
   } while(front_size < pred_front_size);
 
   return front_size == 0;
@@ -268,7 +270,7 @@ void MTPGraph::find_shortest_path() {
   for(int k = 0; k < _nb_vertices; k++) {
     _vertices[k].distance_from_source = FLT_MAX;
     _vertices[k].pred_edge_toward_source = 0;
-    _vertices[k].iteration = 0;
+    _vertices[k].last_change = -1;
   }
 
   int iteration = 0;
@@ -279,7 +281,6 @@ void MTPGraph::find_shortest_path() {
 
   do {
     new_front_size = 0;
-    iteration++;
 
     for(int f = 0; f < front_size; f++) {
       v = _front[f];
@@ -289,9 +290,9 @@ void MTPGraph::find_shortest_path() {
         if(d < tv->distance_from_source) {
           tv->distance_from_source = d;
           tv->pred_edge_toward_source = e;
-          if(tv->iteration < iteration) {
+          if(tv->last_change < iteration) {
             _new_front[new_front_size++] = tv;
-            tv->iteration = iteration;
+            tv->last_change = iteration;
           }
         }
       }
@@ -300,6 +301,8 @@ void MTPGraph::find_shortest_path() {
     tmp_front = _new_front; _new_front = _front; _front = tmp_front;
 
     front_size = new_front_size;
+
+    iteration++;
   } while(front_size > 0);
 }
 
@@ -328,7 +331,8 @@ void MTPGraph::find_best_paths(scalar_t *lengths) {
 
     // Do we reach the sink?
     if(_sink->pred_edge_toward_source) {
-      // If yes, compute the length of the best path
+      // If yes, compute the length of the best path according to the
+      // original edge lengths
       v = _sink;
       while(v->pred_edge_toward_source) {
         total_length += v->pred_edge_toward_source->length;