From: Francois Fleuret Date: Tue, 1 Jan 2013 22:59:40 +0000 (+0100) Subject: Simplified a bit find_shortest_path. X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=commitdiff_plain;h=0a6d07532af68442ca86e3e23740204443b965e0;p=mtp.git Simplified a bit find_shortest_path. --- diff --git a/mtp_graph.cc b/mtp_graph.cc index 5b42781..983e3a0 100644 --- a/mtp_graph.cc +++ b/mtp_graph.cc @@ -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) { diff --git a/mtp_graph.h b/mtp_graph.h index e0f40e9..33a29f5 100644 --- a/mtp_graph.h +++ b/mtp_graph.h @@ -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)