X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=mtp.git;a=blobdiff_plain;f=mtp_graph.cc;h=983e3a0798088144e34f9fb2fcfa499dd649f7f3;hp=5b42781f0b0ae8885f12fb20ddbe48c4d89f1d37;hb=0a6d07532af68442ca86e3e23740204443b965e0;hpb=5c9f12580ae4e515ef48d0891c7d85a3d7eb2b04 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) {