//////////////////////////////////////////////////////////////////////
 
-void MTPGraph::print() {
-  for(int k = 0; k < _nb_edges; k++) {
-    Edge *e = _edges + k;
-    cout << e->origin_vertex->id
-         << " -> "
-         << e->terminal_vertex->id
-         << " "
-         << e->length;
-    if(e->occupied) {
-      cout << " *";
-    }
-    cout << endl;
-  }
-}
-
-void MTPGraph::print_dot() {
-  cout << "digraph {" << endl;
-  cout << "  node[shape=circle];" << endl;
-  for(int k = 0; k < _nb_edges; k++) {
-    Edge *e = _edges + k;
-    if(e->occupied) {
-      cout << "  " << e->origin_vertex->id << " -> " << e->terminal_vertex->id
-           << " [style=bold,color=black,label=\"" << -e->length << "\"];" << endl;
-    } else {
-      cout << "  " << e->origin_vertex->id << " -> " << e->terminal_vertex->id
-           << " [color=gray,label=\"" << e->length << "\"];" << endl;
-    }
-  }
-  cout << "}" << endl;
-}
-
 MTPGraph::MTPGraph(int nb_vertices, int nb_edges,
                    int *from, int *to,
                    int source, int sink) {
     _edges[e].terminal_vertex = _vertices + to[e];
   }
 
+  paths = 0;
+  nb_paths = 0;
 }
 
 MTPGraph::~MTPGraph() {
   delete[] _edges;
   delete[] _front;
   delete[] _new_front;
+  for(int p = 0; p < nb_paths; p++) delete paths[p];
+  delete[] paths;
+}
+
+//////////////////////////////////////////////////////////////////////
+
+void MTPGraph::print() {
+  for(int k = 0; k < _nb_edges; k++) {
+    Edge *e = _edges + k;
+    cout << e->origin_vertex->id
+         << " -> "
+         << e->terminal_vertex->id
+         << " "
+         << e->length;
+    if(e->occupied) {
+      cout << " *";
+    }
+    cout << endl;
+  }
 }
 
+void MTPGraph::print_dot() {
+  cout << "digraph {" << endl;
+  cout << "  node[shape=circle];" << endl;
+  for(int k = 0; k < _nb_edges; k++) {
+    Edge *e = _edges + k;
+    if(e->occupied) {
+      cout << "  " << e->origin_vertex->id << " -> " << e->terminal_vertex->id
+           << " [style=bold,color=black,label=\"" << -e->length << "\"];" << endl;
+    } else {
+      cout << "  " << e->origin_vertex->id << " -> " << e->terminal_vertex->id
+           << " [color=gray,label=\"" << e->length << "\"];" << endl;
+    }
+  }
+  cout << "}" << endl;
+}
+
+//////////////////////////////////////////////////////////////////////
+
 void MTPGraph::initialize_positivized_lengths_with_min() {
   scalar_t length_min = 0;
   for(int n = 0; n < _nb_vertices; n++) {
     result_edge_occupation[k] = e->occupied;
   }
 }
+
+void MTPGraph::retrieve_paths() {
+  Edge *e;
+
+  for(int p = 0; p < nb_paths; p++) delete paths[p];
+  delete[] paths;
+
+  nb_paths = 0;
+  for(e = _source->leaving_edges; e; e = e->next_leaving_edge) {
+    if(e->occupied) { nb_paths++; }
+  }
+
+  paths = new Path *[nb_paths];
+
+  int p = 0;
+  for(e = _source->leaving_edges; e; e = e->next_leaving_edge) {
+    if(e->occupied) {
+      paths[p] = new Path();
+      p++;
+    }
+  }
+
+  cout << "NB_PATHS " << nb_paths << endl;
+}