je voudrais implémenter une méthode récursive du voyageur de commerce. En effet, je ne voudrais pas explorer tous les circuits possibles mais seulement le circuit dont la distance est inférieure ou au pire égale à la distance passée en paramètre. J'ai essayé donc d'écrire le code suivant. Pourriez vous m'aider à trouver les erreurs ?
static void
explore_aux(matrice_distance m, bool *visite, int *chemin,int *cheminIdeal, int position, int ville, double borneInf,double distanceCourant){
int i;
/* chemin[ville] = position; */
if (position == NBRE_VILLE){
afficher_methode(cheminIdeal,NBRE_VILLE);
return ;
}
if (distanceCourant < borneInf){
chemin[ville] = position;
visite[position] = true;
for(i=0; i< NBRE_VILLE; i++){
if (m[position][i] == 0 || visite[i])
continue;
distanceCourant += m[position][i]; /* distance des sommets deja parcourus*/
explore_aux(m,visite,chemin,cheminIdeal,i,ville+1,borneInf,distanceCourant);
visite[position] = false;
}
}
else{
distanceCourant += m[position][0];
if (distanceCourant < borneInf){
borneInf = distanceCourant;
for(int i=0; i<NBRE_VILLE; i++)
cheminIdeal[i] = chemin[i];
}
}
}
void explore(matrice_distance m, bool *visite){
for(int i=0; i<NBRE_VILLE; i++)
visite[i] = false;
double distanceMax = distanceMethodeInsertion(m,visite);
memset(visite,0,sizeof(visite));
int *chemin = creerChemin(NBRE_VILLE);
int *cheminIdeal = creerChemin(NBRE_VILLE);
explore_aux(m,visite,chemin,cheminIdeal,0,0,distanceMax,0);
}
Merci de votre aide !!