j'aimerais introduire dans mon programme une ligne de texte me donnant le nombre de transfert d'une tour a une autre.
j'ai donc utiliser un tableau a 3 dimanssions de compteur. le seul hic c'est qu'il me rajoute des transferts en trop. ex:au lieux de me metre un transfert de la tour 1 vers la tour , il me met un transfert de la tour 1 vers 3, 2 vers 3 et 3 vers 3. cependant il devrait seulement me compter un transfer de 1 vers 3. please help. voici mon code:
#include<stdio.h>
typedef struct el{int val; struct el *suiv;} Elem;
typedef Elem * Pile;
void initialiser(Pile *sommet)
{*sommet=NULL;}
void empiler(int v, Pile *sommet)
{
Pile t=(Pile)malloc(sizeof(Elem));
t->val=v;
t->suiv=*sommet;
*sommet=t;
}
void depiler(int *v, Pile *sommet)
{
Pile tmp=NULL;
if (*sommet!=NULL)
{
tmp=(*sommet)->suiv;
*v=(*sommet)->val;
free(*sommet);
}
*sommet=tmp;
}
void hanoi(int n, Pile *a, Pile *b, Pile *c,int d, int e, int f,int tab[],int tab2[])
{
int z;
if (n>=1)
{
hanoi(n-1,a,c,b,d,f,e,tab,tab2);
depiler(&z,a);
empiler(z,c);
tab[z]+=1;
printf("transfert du disque de la tour %d vers la tour %d \n",d,f);
tab2[d,f] += 1;
printf("%d deplacement du disque %d ver %d\n", tab2[d,f],d,f);
printf("\n cours du tableau 2\n" );
int i,j;
for (i=1; i<=3; i++)
for (j=1; j<=3; j++)
if(i!=j)
printf(" deplacement %d vers %d vaut %d\n",i,j,tab2[i,j]);
hanoi(n-1,b,a,c,e,d,f,tab,tab2);
}
}
void affiche(Pile p)
{
while (p!=NULL)
{
printf("%d\n",p->val);
p=p->suiv;
}
}
main()
{
//delcaration des variables
int v,i,n,j,max=3;
Pile a,b,c;
int t[n],t2[max,max];
initialiser(&a);
initialiser(&b);
initialiser(&c);
printf("veuiller entrer le nombre de disques\n" );
scanf("%d",&n);
//initialiser la tour 1
for(i=n;i>=1;i--)
{
empiler(i,&a);
}
//initialilser a zero te tableau t
for(i=0;i<n;i++)
t[i]=0;
printf("******affichage de la premiere tour 1 l'initialisation****** \n" );
affiche(a);
//initialisation a zero le tableau 2
for (i=1; i<=3; i++)
for (j=1; j<=3; j++)
t2[i,j]=0;
printf("******visualisation du tab2 au depart du programme******\n" );
for (i=1; i<=3; i++)
for (j=1; j<=3; j++)
{printf("deplacement %d vers %d vaut %d\n",i,j,t[i,j]);}
//debut du programe hanoi
hanoi(n,&a,&b,&c,1,2,3,t,t2);
printf("*****tour 1***** \n" );
affiche(a);
printf("*****tour 2***** \n" );
affiche(b);printf("*****affiche tour 3*****\n" );affiche(c);
printf("**********Deplacement jetons***********\n" );
for(i=1;i<=n;i++)
printf("t[%d]=%d\n",i,t[i]);
printf("**********nombre de deplacement d'une tour a une autre***********\n\n" );
for (i=1; i<=3; i++)
for (j=1; j<=3; j++)
{
if (i!=j)
printf(" %d deplacements de la tour %d vers %d \n ", t2[i,j], i, j);
}
}