Bonsoir,

J’ai un exercice à faire durent cette semaine (Tours de Hanoï) j'ai travaillé dessus s’est dernier jours sauf que là j'ai vraiment vraiment les bou... je bloque au niveau de la fonction Hanoi j’essaie d’appliquer l’algorithme que j’ai trouvé sur Wikipédia mais sans aucun résultat si quelqu’un peut m’aider je lui serai reconnaissant merci d’avance.


l'algorithme:

procédure Hanoï(n, D, A, I)
    si n ≠ 0
        Hanoï(n-1, D, I, A)
        Déplacer le disque de D vers A
        Hanoï(n-1, I, A, D)
    fin-si
fin-procédure
mon code

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
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
 
#include<stdio.h>
#include<stdlib.h>
 
typedef struct Element Element;
struct Element
{
	int nbr;
	Element *suivant;
};
 
typedef struct Pile Pile;
struct Pile
{
	Element *premier;
};
 
Pile *initialiser()
{
    Pile *pile = malloc(sizeof(*pile));
    pile->premier = NULL;
}
 
void empiler(Pile *pile,int nbr)
{
	Element *nouveau = malloc(sizeof(*nouveau));
	if(pile == NULL || nouveau == NULL)
	{
		printf("Un probleme s'est produit lors de l'appelle de la ft 'empiler'");
		system("pause");
		exit(EXIT_FAILURE);
	}
	nouveau->nbr = nbr;
	nouveau->suivant = pile->premier;
	pile->premier = nouveau;
}
 
void afficherPile(Pile *pile)
{
    if (pile == NULL)
    {
		printf("Un probleme s'est produit lors de l'appelle de la ft 'afficherPile'");
		system("pause");
        exit(EXIT_FAILURE);
    }
    Element *actuel = pile->premier;
 
    while (actuel != NULL)
    {
        printf("%d\n", actuel->nbr);
        actuel = actuel->suivant;
    }
 
    printf("\n");
}
 
void hanoi(int n, Pile *depart, Pile *arivee, Pile *inter)
{
	Element *elementDepile = depart->premier;
 
	if(n != 0)
	{
 
		hanoi(n-1,depart,inter,arivee);
 
		//Déplacer le disque de P1 vers P3
		empiler(arivee, depart->premier->nbr);
		depart->premier = depart->premier->suivant;
		free(elementDepile);
 
		hanoi(n-1,inter,arivee,depart);
 
	}
 
}
 
int main()
{
	/* création de 3 piles*/
	Pile *p1 = initialiser();
	Pile *p2 = initialiser();
	Pile *p3 = initialiser();
 
    empiler(p1, 1);
    empiler(p1, 2);
    empiler(p1, 3);
    empiler(p1, 4);
    empiler(p1, 5);
    empiler(p1, 6);
 
	printf("**Pile1** \n");
	afficherPile(p1);
	printf("**Pile3** \n");
	afficherPile(p3);
 
	hanoi(3,p1,p3,p2);
 
	printf("**Pile1** \n");
	afficherPile(p1);
	printf("**Pile3** \n");
	afficherPile(p3);
 
 
 
	return 0;
}