Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- void mova(int n, int a,int b, int c){
- if(n==1){//aqui é o caso base, n=1 havera apenas um movimento de 1 pra 3
- printf("Mova de %d para %d \n\n",a,c);
- }else{//aqui vai fazer as trocas, considerando n e n-1,
- mova(n-1,a,c,b);//o objetivo aqui é levar o ultimo disco para o destino empilhando os demais discos em b
- printf("Mova de %d para %d \n\n",a,c);
- mova(n-1,b,a,c);//com o ultimo disco já no destino é feita a troca novamente para levar o restante da pilha para o destino tambem, mudando de b para c usando a como auxiliar
- }
- }
- int main(){
- int n,i,p2,m;//p2 é usada para calcular as potencias de 2, e m para saber a quantidade minima de movimentos
- int a,b,c;//essas variaveis representam as tres hastes, 'a' euqivale a origem, 'b' equivale a haste auxiliar e 'c' é a destino
- a=1;
- b=2;
- c=3;
- printf("\nEntre com o numero de discos: ");
- scanf("%d", &n);
- p2=1;
- for (i=0;i<n; i++){
- p2=p2*2;
- }
- m=p2-1;
- printf("\nUma execucao perfeita tera %d movimentos \n\n",m);
- mova(n,a,b,c);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement