1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
void parcourir(parcours p, int nb_villes, int k, bool * villeVisite){
if(p->niveau == nb_villes){
double dp=distanceParcours(p);
for(int i=0; i<nb_villes; i++)
printf("%d ",p->itineraire[i]);
printf("%f \n",dp);
if(dp < min->distance){
min->distance = dp;
copierItineraire(min->itineraire, p->itineraire, nb_villes);
}
}
else{
k_villes_pp tab = k_villesPlusProches( p->itineraire[p->niveau], villeVisite, k, nb_villes ); // allocation 1
for(int i=0; i < k && i < tab->nb_vpp ; i++){
bool * villeVisite_i = dupliquer(villeVisite, nb_villes); // allocation 2
villeVisite_i[tab->vpp[i]]=true;
parcours p_i = ajouterParcours( p, tab->vpp[i] ); // allocation 3
parcourir(p_i, nb_villes, k, villeVisite_i);
memoire_liberer(villeVisite_i); // liberation 1
memoire_liberer(p_i->itineraire); // liberation 2
}
memoire_liberer(tab->vpp); // liberation 3
}
} |
Partager