}
 
 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];