#include #include typedef enum tour {rouge,verte,bleue} Tour; char* traduit(Tour); char* traduit(Tour une_tour) { switch(une_tour) { case rouge : return "rouge"; case verte : return "verte"; case bleue : return "bleue"; } } void main() { int nbr_anneaux ; int * pile_n, * pile_rang; Tour * pile_or, * pile_dest, * pile_inter; int hpile; printf("Avec combien d'anneaux voulez-vous jouer ? Donnez un nombre positif\n"); scanf("%d",&nbr_anneaux); if (nbr_anneaux<=0) { printf("le nombre d'anneaux doit être strictement positif"); return 1; } pile_n = (int *) malloc ((nbr_anneaux+1)*sizeof(int)); pile_rang = (int *) malloc ((nbr_anneaux+1)*sizeof(int)); pile_or = (Tour *) malloc ((nbr_anneaux+1)*sizeof(Tour)); pile_dest = (Tour *) malloc ((nbr_anneaux+1)*sizeof(Tour)); pile_inter = (Tour *) malloc ((nbr_anneaux+1)*sizeof(Tour)); pile_n[0]=nbr_anneaux; pile_or[0]=rouge; pile_dest[0]=verte; pile_inter[0]=bleue; hpile=1; while(hpile!=0) { if (pile_n[hpile-1]>0) { pile_rang[hpile-1]=0; pile_n[hpile]=pile_n[hpile-1]-1; pile_or[hpile]= pile_or[hpile-1]; pile_dest[hpile]=pile_inter[hpile-1]; pile_inter[hpile]=pile_dest[hpile-1]; hpile++; } else { do hpile--; while (pile_rang[hpile-1]==1); if(hpile!=0) { printf("transportez l'anneau qui est en haut de la tour %s " "vers la tour %s\n",traduit(pile_or[hpile-1]),traduit(pile_dest[hpile-1])); pile_rang[hpile-1]=1; pile_n[hpile]=pile_n[hpile-1]-1; pile_or[hpile]=pile_inter[hpile-1]; pile_dest[hpile]=pile_dest[hpile-1]; pile_inter[hpile]=pile_or[hpile-1]; hpile+=1; } } } free(pile_n); free(pile_rang); free(pile_or); free(pile_dest); free(pile_inter); }