+ if(e == leaving_edges) { leaving_edges = e->next_leaving_edge; }
+ if(e->pred_leaving_edge) { e->pred_leaving_edge->next_leaving_edge = e->next_leaving_edge; }
+ if(e->next_leaving_edge) { e->next_leaving_edge->pred_leaving_edge = e->pred_leaving_edge; }
+}
+
+//////////////////////////////////////////////////////////////////////
+
+Path::Path(int l) {
+ length = l;
+ nodes = new int[length];
+}
+
+Path::~Path() {
+ delete[] nodes;
+}
+
+//////////////////////////////////////////////////////////////////////
+
+MTPGraph::MTPGraph(int nb_vertices, int nb_edges,
+ int *from, int *to,
+ int source, int sink) {
+ _nb_vertices = nb_vertices;
+ _nb_edges = nb_edges;
+
+ _edges = new Edge[_nb_edges];
+ _vertices = new Vertex[_nb_vertices];
+ _front = new Vertex *[_nb_vertices];
+ _new_front = new Vertex *[_nb_vertices];
+
+ _source = &_vertices[source];
+ _sink = &_vertices[sink];
+
+ for(int v = 0; v < _nb_vertices; v++) {
+ _vertices[v].id = v;
+ }
+
+ for(int e = 0; e < nb_edges; e++) {
+ _vertices[from[e]].add_edge(_edges + e);
+ _edges[e].occupied = 0;
+ _edges[e].id = e;
+ _edges[e].origin_vertex = _vertices + from[e];
+ _edges[e].terminal_vertex = _vertices + to[e];
+ }
+
+ paths = 0;
+ nb_paths = 0;
+}
+
+MTPGraph::~MTPGraph() {
+ delete[] _vertices;
+ delete[] _edges;
+ delete[] _front;
+ delete[] _new_front;
+ for(int p = 0; p < nb_paths; p++) delete paths[p];
+ delete[] paths;