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