func generateCandidateTypeC(current_solution Candidate) (c Candidate, swapped_node int) {
	neighbor := Candidate{}

	neighbor.Solution = make([]int, len(current_solution.Solution))
	neighbor.Hubs = make([]int, len(current_solution.Hubs))
	copy(neighbor.Solution, current_solution.Solution)
	copy(neighbor.Hubs, current_solution.Hubs)

	random_node, random_hub := selectRandomNodeAndHub(neighbor)

	neighbor.Solution[random_node] = random_hub

	return neighbor, random_node
}
// reallocate a random node to a new hub
reallocate a random node to a new hub
// reallocate a random node to a new hub
func generateCandidateTypeC(current_solution Candidate) (c Candidate, swapped_node int) {
	neighbor := Candidate{}
	neighbor.Solution = make([]int, len(current_solution.Solution))
	neighbor.Hubs = make([]int, len(current_solution.Hubs))
	copy(neighbor.Solution, current_solution.Solution)
	copy(neighbor.Hubs, current_solution.Hubs)
	random_node, random_hub := selectRandomNodeAndHub(neighbor)
	neighbor.Solution[random_node] = random_hub
	return neighbor, random_node
}
func generateCandidateTypeC ( current_solution Candidate ) ( c Candidate , swapped_node int ) { neighbor := Candidate { } neighbor . Solution = make ( [ ] int , len ( current_solution . Solution ) ) neighbor . Hubs = make ( [ ] int , len ( current_solution . Hubs ) ) copy ( neighbor . Solution , current_solution . Solution ) copy ( neighbor . Hubs , current_solution . Hubs ) random_node , random_hub := selectRandomNodeAndHub ( neighbor ) neighbor . Solution [ random_node ] = random_hub return neighbor , random_node }
reallocate a random node to a new hub
reallocate a random node to a new hub