From: Francois Fleuret Date: Thu, 30 Aug 2012 06:47:45 +0000 (+0200) Subject: Cosmetics. X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=commitdiff_plain;h=e03634d09a9049c7ae4fb426c67ad513cc84185a;p=mtp.git Cosmetics. --- diff --git a/mtp_graph.cc b/mtp_graph.cc index d3b921b..052de17 100644 --- a/mtp_graph.cc +++ b/mtp_graph.cc @@ -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;