Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool upgrade = false;
- for(int nl = 0; nl < this->chromosome.size(); ++nl) //for each
- {
- for(int m = 0; m < world->getNeighbor(0).size(); ++m)
- {
- int ml = chromsome_indexes[world->getNeighbor(nl)[m]];
- int nr;
- int mr;
- if(nl == chromosome.size()-1)
- {nr = 0;}
- else
- {nr = nl + 1;}
- if(ml == chromosome.size()-1)
- {mr = 0;}
- else
- {mr = ml + 1;}
- if(nl == ml || nl == mr || nr == ml || nr == mr)
- continue;
- int nlc = chromosome[nl];
- int nrc = chromosome[nr];
- int mlc = chromosome[ml];
- int mrc = chromosome[mr];
- if(world->getDistance(nlc, nrc) + world->getDistance(mlc, mrc)
- > world->getDistance(nlc, mlc) + world->getDistance(mrc, nrc))
- {
- upgrade = true;
- int i = ml < nr ? ml : nr;
- int j = ml < nr ? nr : ml;
- while(i < j) //turn a part of the graph.
- {
- //std::cerr << "yay";
- int tmp = chromosome[i];
- chromosome[i] = chromosome[j];
- chromosome[j] = tmp; //swaps index i and j in chromosome
- chromsome_indexes[chromosome[i]] = i;
- chromsome_indexes[chromosome[j]] = j;
- ++i;
- --j;
- }
- }
- }
- }
- //createChromosomeIndexes();
- return upgrade;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement