Update.
authorFrancois Fleuret <francois@fleuret.org>
Wed, 22 Aug 2012 18:42:32 +0000 (11:42 -0700)
committerFrancois Fleuret <francois@fleuret.org>
Wed, 22 Aug 2012 18:42:32 +0000 (11:42 -0700)
mtp_graph.cc
mtp_graph.h
tracker.cc

index 95dc451..b83871d 100644 (file)
@@ -82,37 +82,6 @@ void Vertex::del_edge(Edge *e) {
 
 //////////////////////////////////////////////////////////////////////
 
-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) {
@@ -139,6 +108,8 @@ MTPGraph::MTPGraph(int nb_vertices, int nb_edges,
     _edges[e].terminal_vertex = _vertices + to[e];
   }
 
+  paths = 0;
+  nb_paths = 0;
 }
 
 MTPGraph::~MTPGraph() {
@@ -146,8 +117,45 @@ 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++) {
@@ -297,3 +305,27 @@ void MTPGraph::find_best_paths(scalar_t *lengths, int *result_edge_occupation) {
     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;
+}
index f2bedd4..e465688 100644 (file)
 class Vertex;
 class Edge;
 
+class Path {
+public:
+  int starting_time;
+  int duration;
+  int *nodes;
+};
+
 class MTPGraph {
   void initialize_positivized_lengths_with_min();
   void update_positivized_lengths();
@@ -40,12 +47,17 @@ class MTPGraph {
 
 public:
 
+  int nb_paths;
+  Path **paths;
+
   MTPGraph(int nb_vertices, int nb_edges, int *from, int *to,
            int source, int sink);
 
   ~MTPGraph();
 
   void find_best_paths(scalar_t *lengths, int *result_edge_occupation);
+  void retrieve_paths();
+
   void print();
   void print_dot();
 };
index e6d5d0e..4d5ebe7 100644 (file)
@@ -139,7 +139,8 @@ void Tracker::track() {
   }
 
   _graph->find_best_paths(_edge_lengths, _edge_occupation);
-  _graph->print_dot();
+  _graph->retrieve_paths();
+  // _graph->print_dot();
 }
 
 // void Tracker::track() {