Bonsoir, Qqun connait il le principe du jeu : "la tour de Hanoi"?
Bonsoir, Qqun connait il le principe du jeu : "la tour de Hanoi"?
L'homme est prédestiné à l'objet de ses propres choix .
Bonjour
Forum Algo.
Pour l'implémentation en C tu pourras revenir si tu as des problèmes.
Sinon le prinicpe c'est déplacer la tour A vers la tour B en utilisant la tour C, en ne déplacant à chaque fois qu'un seul disque.
Il y a trois méthodes, la récursive, la dérécursivée utilisant une pile et l'itérative.
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Merci
L'homme est prédestiné à l'objet de ses propres choix .
voilà pour t'entrainer un peu,
C'est le devoir de chaque homme de rendre au monde au moins autant qu'il en a reçu -- Albert Einstein
Mon blog: http://blackhorus.blogspot.com
Je te conseille fortement d'utiliser les piles.
Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
Mon espace perso[/B]
La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]
Pourquoi ????
Il faut savoir utiliser aussi la récursivité, même si c'est le compilo qui fait le travail.
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Je trouve plus simple avec les piles et la recursivité (on peut comparer une tour a une pile [on empile, on depile])Envoyé par Trap D
Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
Mon espace perso[/B]
La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]
Je ne suis pas sûr d'avoir bien compris (les piles et la récursivité).
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
La recursivite je pense que c est le mieux si tu n es pas trop regardant a la performance.
Avec un nombre de palets consequents ca devient vite cauchemardesque...
Mais au niveau ecriture, c'est le plus simple (pour peu qu on soit a l aise avec la recursivite).
En faisant un truc tres compact tu arrive a une fonction d'une dizaines de lignes.
Sinon pour une version plus "lisible" :
Explication rapide :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 void move_hanoi(int nb_disk, int src, int dst) { if (nb_disk > 1) { move_hanoi(nb_disk - 1, src, get_free(src, dst)); move_hanoi(1, src, dst); move_hanoi(nb_disk - 1, get_free(src, dst), dst); } if (nb_disk == 1) { put_nbr(src); putchar('-'); putchar('>'); put_nbr(dst); putchar('\n'); } } int my_hanoi(int nb_disk) { move_hanoi(nb_disk, 1, 3); return (0); }
dans ton main tu appelle my_hanoi.
put_nbr je fais pas un dessin ca affiche un nombre.
get_free non plus ca te retourne la troisieme tour : get_free(2, 3) -> 1
C'est pas le plus court, mais c'est relativement clair. Et ca marche.
Vive la recursivite.
Mais encore une fois, si tu fais un hanoi consequent tu va avoir un nombre de fonctions creees enorme.
Don't worry, be serious.
La vie est courte. Prenez votre temps.
Jack.
au fait, le fameux get_free(src, dest), tu peut être simplement implémenté ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part int get_free(int src, int dst) { return (6 - src - dst); }
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager