Simplified a bit find_shortest_path.
authorFrancois Fleuret <francois@fleuret.org>
Tue, 1 Jan 2013 22:59:40 +0000 (23:59 +0100)
committerFrancois Fleuret <francois@fleuret.org>
Tue, 1 Jan 2013 22:59:40 +0000 (23:59 +0100)
mtp_graph.cc
mtp_graph.h

index 5b42781..983e3a0 100644 (file)
@@ -284,20 +284,20 @@ void MTPGraph::find_shortest_path() {
     _vertices[k].pred_edge_toward_source = 0;
   }
 
-  _heap_size = _nb_vertices;
+  int heap_size = _nb_vertices;
   _source->distance_from_source = 0;
   _source->decrease_distance_in_heap(_heap);
 
-  do {
+   while(heap_size > 0) {
     // Get the closest to the source
     v = _heap[0];
 
     // Remove it from the heap (swap it with the last_slot in the heap, and
     // update the distance of that one)
-    _heap_size--;
-    last_slot = _heap + _heap_size;
+    heap_size--;
+    last_slot = _heap + heap_size;
     swap(*_heap, *last_slot); swap((*_heap)->heap_slot, (*last_slot)->heap_slot);
-    _heap[0]->increase_distance_in_heap(_heap, _heap + _heap_size);
+    _heap[0]->increase_distance_in_heap(_heap, last_slot);
 
     // Now update the neighbors of the node currently closest to the
     // source
@@ -305,13 +305,13 @@ void MTPGraph::find_shortest_path() {
       d = v->distance_from_source + e->positivized_length;
       tv = e->terminal_vertex;
       if(d < tv->distance_from_source) {
-        ASSERT(tv->heap_slot - _heap < _heap_size);
+        ASSERT(tv->heap_slot < last_slot);
         tv->distance_from_source = d;
         tv->pred_edge_toward_source = e;
         tv->decrease_distance_in_heap(_heap);
       }
     }
-  } while(_heap_size > 0);
+  }
 }
 
 void MTPGraph::find_best_paths(scalar_t *lengths) {
index e0f40e9..33a29f5 100644 (file)
@@ -71,7 +71,6 @@ class MTPGraph {
 
   // For Dijkstra
   Vertex **_heap;
-  int _heap_size;
 
   // Updating the distances from the source in that order will work in
   // the original graph (which has to be a DAG)