bool operator()(tEdge const & l, tEdge const & r) const {
      if (compareDistances(l.distance_ub, r.distance_ub))
	return true;
      else if (compareDistances(r.distance_ub, l.distance_ub))
	return false;
      else if (l.lowCluster < r.lowCluster)
	return true;
      else if (l.lowCluster > r.lowCluster)
	return false;
      else
	return (l.highCluster < r.highCluster);
    }
Exemple #2
0
void assessSwap(COORD*before,COORD*after,int nc,int pair[])
{
	int length = pair[1]-pair[0]+1;
	fprintf(stderr,"Checking coords...\n");
	fprintf(stderr,"First part...\n");
	compareTours(before,after,pair[0],0);
	fprintf(stderr,"Middle part...\n");
	compareTours(before+pair[0],after+pair[0],length,1);
	fprintf(stderr,"Last part...\n");
	compareTours(before+pair[1]+1,after+pair[1]+1,nc-pair[1]-1,0);
	fprintf(stderr,"\n");
	//swapped edges
	//compareSums(before+pair[0]-1,after+pair[1]-1,1);
	//compareSums(before+pair[1]-1,after+pair[0]-1,0);
	fprintf(stderr,"Checking distances...\n");
	fprintf(stderr,"First part...\n");
	compareDistances(before,after,pair[0],0);
	fprintf(stderr,"Middle part...\n");
	compareDistances(before+pair[0],after+pair[0],length,1);
	fprintf(stderr,"Last part...\n");
	compareDistances(before+pair[1]+1,after+pair[1]+1,nc-pair[1]-1,0);
	fprintf(stderr,"\n");
}
void joinDistances(	std::list<AtomRecord> *atomlist,
			Real *distances,
			Integer Nsites,
			Integer *Joins
		)
{
std::list<AtomRecord>::iterator it1,it2;
int i,j;

Integer N2 = Nsites * Nsites;

memset(	Joins,	//void *s, 
	0,	// int c, 
	N2 * sizeof(Integer)	//size_t n
	);

for(i=0, it1 = atomlist->begin(); i<Nsites; i++,it1++)
{
	AtomRecord atom1 = *it1;
	for( j=i, it2=it1; j<Nsites; j++,it2++)
	{
		AtomRecord atom2 = *it2;
		if(	strcmp( atom1.element, atom2.element)==0  &&
			compareDistances(	distances,	//Real *distances,
						Nsites,	//Integer Nsites,
						i,	//Integer lineA,
						j	//Integer lineB,
						//Real eps = 1e-2 
					)	
		) //if
		{
			Joins[ i*Nsites + j ] = 1;
			Joins[ j*Nsites + i ] = 1;
		}
	}//for j

}//for i
}