- #include <stdio.h>
- #define max 10
-
- /* algorithme de résolution du casse tête des tours de hanoi(grand classique) */
- /* Clément ARNOUX 03/2003 */
-
- /* definition du support des tours */
- /* nota : les 100 servent de base et d'arret pour les while de la fonction move */
- int tours[max][3]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{100,100,100}};
-
-
- /* fonction d'affichage des tours */
- void affich (int table[max][3]) {
- int i,j;
- for (i=0;i<max-1;i++) {
- for (j=0; j<3; j++) {
- printf("%d|",table[i][j]);
- }
- printf("\n");
- }
- printf("\n");
- }
-
-
- /* déplacement du plus haut disque de i vers j */
- void move (int i, int j) {
- int k, l;
- k=0;
- l=0;
- while (tours[k][i]==0){
- k++;
- }
- while(tours[l][j]==0){
- l++;
- }
- l--;
- tours[l][j]=tours[k][i];
- tours[k][i]=0;
- affich(tours);
- }
-
-
- /* la fonction recursive principale */
- void hanoi (int n, int i, int j) {
- if (n==1) {
- move(i,j);
- }
- else {
- hanoi(n-1,i,3-(i+j));
- move(i,j);
- hanoi(n-1,3-(i+j),j);
- }
- }
-
- /* fonction principale */
- int main (void) {
- int i,etag;
- printf("les tours de Hanoi\n");
- printf("entrez le nombre d'etages (3-8) : ");
- scanf("%d",&etag);
- for (i=0; i<etag ; i++) {
- tours[max-2-i][0]=etag-i;
- }
- affich(tours);
- printf("\n");
- hanoi(etag,0,2);
- return 0;
- }
#include <stdio.h>
#define max 10
/* algorithme de résolution du casse tête des tours de hanoi(grand classique) */
/* Clément ARNOUX 03/2003 */
/* definition du support des tours */
/* nota : les 100 servent de base et d'arret pour les while de la fonction move */
int tours[max][3]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
{0,0,0},{0,0,0},{0,0,0},{0,0,0},{100,100,100}};
/* fonction d'affichage des tours */
void affich (int table[max][3]) {
int i,j;
for (i=0;i<max-1;i++) {
for (j=0; j<3; j++) {
printf("%d|",table[i][j]);
}
printf("\n");
}
printf("\n");
}
/* déplacement du plus haut disque de i vers j */
void move (int i, int j) {
int k, l;
k=0;
l=0;
while (tours[k][i]==0){
k++;
}
while(tours[l][j]==0){
l++;
}
l--;
tours[l][j]=tours[k][i];
tours[k][i]=0;
affich(tours);
}
/* la fonction recursive principale */
void hanoi (int n, int i, int j) {
if (n==1) {
move(i,j);
}
else {
hanoi(n-1,i,3-(i+j));
move(i,j);
hanoi(n-1,3-(i+j),j);
}
}
/* fonction principale */
int main (void) {
int i,etag;
printf("les tours de Hanoi\n");
printf("entrez le nombre d'etages (3-8) : ");
scanf("%d",&etag);
for (i=0; i<etag ; i++) {
tours[max-2-i][0]=etag-i;
}
affich(tours);
printf("\n");
hanoi(etag,0,2);
return 0;
}