Algo C++

Fermé
hano - 22 sept. 2011 à 20:16
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 22 sept. 2011 à 21:38
Bonjour, pouvez m'expliquer le code C++ suivant portant sur le jeu des tours de hanoï, merci à vous :

#include <stdio.h>
#include <time.h> // time()
// déplacer n disques du socle depart vers le socle but
// en utilisant le socle intermédiaire.
void deplacer (int n, char depart, char but, char intermediaire)

{

if (n > 0)
{
printf ("Deplace un disque de la tige %c --> %c\n", depart, but);
deplacer (n-1, depart, intermediaire, but);
deplacer (n-1, intermediaire, but, depart);
}

}

int main ()
{
int n;

printf ("Nombre de disques a deplacer ? ");

scanf ("%d", &n);
//time_t topDebut; time (&topDebut);
deplacer (n, 'A', 'B', 'C');
//time_t topFin; time (&topFin);
//printf ("de %d à %d = %d\n", topDebut, topFin, topFin - topDebut);
}




A voir également:

5 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
22 sept. 2011 à 20:25
Il est faux cet algorithme... Regarde les trois premières étapes pour n=3 :

A -> B // petite pièce sur tige vide
A -> C // moyenne pièce sur tige vide
A -> B // grande pièce sur la petite pièce !

Tu te retrouves à mettre la plus grande pièce par dessus la plus petite...
Or tu dois toujours avoir les petites pièces au dessus des grandes !
0
Salut,

Heu.. oui je me suis trompé en faisant des modif...pour voir ce que ça donne, voici le vrai code :


/* hanoi.cpp tours de Hanoi
exemple de programme avec deux appels récursifs */
#include <stdio.h>
#include <time.h> // time()
// déplacer n disques du socle depart vers le socle but
// en utilisant le socle intermédiaire.
void deplacer (int n, char depart, char but, char intermediaire) {
if (n > 0) {
deplacer (n-1, depart, intermediaire, but);
printf ("Déplacer un disque de %c --> %c\n", depart, but);
deplacer (n-1, intermediaire, but, depart);
}
}
void main () {
printf ("Nombre de disques à déplacer ? ");
int n; scanf ("%d", &n);
//time_t topDebut; time (&topDebut);
deplacer (n, 'A', 'B', 'C');
//time_t topFin; time (&topFin);
//printf ("de %d à %d = %d\n", topDebut, topFin, topFin - topDebut);
}


J'comprends pas trop..

merci
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
22 sept. 2011 à 20:53
Je pense que tu trouveras toutes les explications sur Wikipedia : Tour de Hanoï
0
Merci, je comprends le principe mais certaines partie de code c++ me paraissent fliou comme :

deplacer (n-1, depart, intermediaire, but); c'est l'appel de la fonction void ? c'est bien ça ?

deplacer (n, 'A', 'B', 'C'); Sorte d'ou les A, B, C, il n'y a pas de variable comme pour n...

voilà si tu pouvais m'expliquer, pour en apprendre plus sur le langage C++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
22 sept. 2011 à 21:38
Peut-être que tu comprendras mieux avec un affichage complet de ce qui se passe :

#include <stdio.h>

void aff(char w,int n,char c1,char c2,char c3,char* ch="")
{
	int i;
	for (i=0; i<3-n; i++) printf("   ");
	printf("deplacer(%d,%c,%c,%c) [%c]\t%s\n",n,c1,c2,c3,w,ch);
}

void deplacer(int n, char depart, char but, char intermediaire)
{
	char ch[50];
	sprintf(ch,"Deplacement %c --> %c",depart,but);

	if (n>0)
	{
		aff('x',n,depart,but,intermediaire);
		deplacer(n-1, depart, intermediaire, but);
		aff('y',n,depart,but,intermediaire,ch);
		deplacer(n-1, intermediaire, but, depart);
		aff('z',n,depart,but,intermediaire);
	}
}

int main()
{
	deplacer(3,'A','B','C');
}
0