}
void Tracker::build_graph() {
- // Delete existing graph
+ // Delete existing graph if there was one
delete[] _edge_lengths;
delete _graph;
int nb_motions = 0, nb_exits = 0, nb_entrances = 0;
+
for(int l = 0; l < _nb_locations; l++) {
if(_exits[l]) nb_exits++;
if(_entrances[l]) nb_entrances++;
int nb_vertices = 2 + 2 * _nb_time_steps * _nb_locations;
int nb_edges =
+ // The edges from the source to the first frame, and from the last
+ // frame to the sink
_nb_locations * 2 +
+ // The edges from the source to the entrances and from the exists
+ // to the sink (in every time frames but the first and last)
(_nb_time_steps - 2) * (nb_exits + nb_entrances) +
+ // The edges for the motions, between every pair of successive
+ // frames
(_nb_time_steps - 1) * nb_motions +
+ // The edges inside the duplicated nodes
_nb_locations * _nb_time_steps;
- int source = 0, sink = nb_vertices - 1;
int *node_from = new int[nb_edges];
int *node_to = new int[nb_edges];
+
+ int source = 0, sink = nb_vertices - 1;
int e = 0;
_edge_lengths = new scalar_t[nb_edges];