protected override DNA <int> Crossover(DNA <int> parent1, DNA <int> parent2) { DNA <int> child = (DNA <int>)parent1.Clone(); int crossOverIndex = rand.Next(tsp.CityCount - rand.Next(tsp.CityCount / 4, tsp.CityCount / 2)); List <int> visitedCities = new List <int>(); for (int j = 0; j < crossOverIndex; j++) { visitedCities.Add(parent1.Data[j]); } for (int j = 0; j < tsp.CityCount; j++) { if (!visitedCities.Contains(parent2.Data[j])) { child.Data[crossOverIndex++] = parent2.Data[j]; } } return(child); }