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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#include <stdio.h>
#include <stdlib.h>
#define NB_VILLES 5
static int k=3;
static chemin chemin_mini;
struct chemin{
int * chemin;
int dstance;
};
struct parcours{
int * chemin;
int niveau;
};
typedef struct parcours * parcours;
typedef struct chemin *chemin;
typedef bool * villeVisite;
void parcours(parcour p, villeVisite v){
if(p->niveau == NB_VILLES){ //Si le parcours est rempli...
int dp=distanceParcours(p); //... on calcule sa distance
if(dp < chemin_mini->distance)//si elle est inferieure a la distance du chemin_mini
{
chemin_mini->chemin = p->chemin; //on la sauve
chemin_mini->distance = dp;// et sa distance aussi
}
}
else{ //Sinon c'est qu'il est pas rempli
int * vpp=kVillesPlusProches(p->chemin[niveau], v); // on récupere dans un tableau les k villes les plus proches de la derniere ville
for(int i=0; i < k; i++){
villeVisite v_i=coche(v, vpp[i]); //on cochera la ville que l'on viste dans le tableau de booleen
parcours p_i=ajouterParcours(p, vpp[i]); //on la rajoute en fin de parcours
parcours(p_i, v_i);// et on lance les appels récursif
liberer(v_i, p_i); // on les liberera
}
}
}
int main(void){
int ville_de_depart=0;
parcours p=parcoursCreer(ville_de_depart, NB_VILLES);
villeVisite v=villeVisiteCreer(NB_VILLES);
coche(v,0);
parcours(p,v);
affiche(chemin_mini);
} |
Partager