[C] explication Tour Hanoï récursive

Fermé
Tony - 16 janv. 2012 à 15:24
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 17 janv. 2012 à 10:39
Bonjour,

il y a quelqu'un qui peut m'expliquer le principe de la tour d'hanoï ?
voici le programme , et merci !

#include<stdio.h>
#include<conio.h>

void tourhanoi(int n,char depart,char base,
char intermediaire,long unsigned int *occur);

int main()
{
int n,i;
long unsigned int occur=0;
printf("Entrez le nombre de disques : ");
scanf("%d",&n);
tourhanoi(n,'1','2','3',&occur);
printf("%ld déplacements\n",occur);
getch();
}

void tourhanoi(int n,char depart,char base,
char intermediaire,long unsigned int *occur){
if(n>0){
++*occur;printf("lalal %d",n);
tourhanoi(n-1,depart,intermediaire,base,occur);
printf("hah");printf("%c -> %c\n",depart,base);
tourhanoi(n-1,intermediaire,base,depart,occur);
}
}





A voir également:

4 réponses

matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
16 janv. 2012 à 15:29
Le but est de deplacer une pile de disque (qui vont du plus grand au plus petit) d'un endroit a un autre.

Voici une animation pour t'aider a comprendre:

https://upload.wikimedia.org/wikipedia/commons/6/60/Tower_of_Hanoi_4.gif


On deplace donc les disques au fur et a mesure pour depiler la pile initiale, afin d'empiler une autre pile ailleurs. (bien entendu, un plus grand disque ne peut pas aller sur un plus petit disque).
0
j'aimerai comprendre l'algo du programme que j'ai déposé .. merci Matthoffman
0
personne n'as une réponse ou quoi ?? :/
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
17 janv. 2012 à 10:39
L'algorithme est assez compliqué.
Il est récursif. Pour le comprendre part de n=1.
puis avec n=2.
et tu intervertit à chaque fois la base et l'intermédiaire. et l'intermédiare et la base. Tu fait toujours le mouvement depart ->base, mais tu interverti les différents tas.
0