Exemple #1
0
int partitionner(vector<vector<int> > *edges, int begin, int end, int pivot, vector<vector<int> > graph) {
	vector<int> tmp = (*edges)[pivot] ;
	(*edges)[pivot] = (*edges)[end] ;
	(*edges)[end] = tmp ;
	int j = begin ;
	for(int i = begin ; i < end - 1 ; i++) {
		if( edgeWeight((*edges)[i],graph) <= edgeWeight((*edges)[end],graph) ) {
			tmp = (*edges)[i] ;
			(*edges)[i] = (*edges)[j] ;
			(*edges)[j++] = tmp ;
		}
	}
	tmp = (*edges)[end] ;
	(*edges)[end] = (*edges)[j] ;
	(*edges)[j] = tmp ;
	return j ;
}
/*!
 *  \param e An edge of the graph.
 *  \param g The graph.
 *  \return true if some of v's distances actually needed an update;
 *          false if nothing changed.
 *  
 *  Let's call e's source u and e's target v. Update v's distances 
 *  using u's distances plus e's weights.
 *  
 *  \sa FloodVisitor, FloodVisitor::vertexDistances_ and EdgeProperty.
 */
bool 
FloodVisitor::broadcastDistances(const Edge & e, const Graph & g)
{
  Vertex u = boost::source(e, g);
  Vertex v = boost::target(e, g);
  Point edgeWeight(g[e].black, g[e].red, g[e].green);

  bool insertedNewDistance = false;
  NonDominatedSet<Point>::iterator udi;
  for (udi = vertexDistances_[u].begin(); 
       udi != vertexDistances_[u].end(); ++udi) {
    insertedNewDistance |= vertexDistances_[v].insert(*udi + edgeWeight);
  }

  return insertedNewDistance;
}