Advertisement
Guest User

Hanoi.c

a guest
Feb 21st, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.05 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. void mova(int n, int a,int b, int c){
  4.     if(n==1){//aqui é o caso base, n=1 havera apenas um movimento de 1 pra 3
  5.         printf("Mova de %d para %d \n\n",a,c);
  6.     }else{//aqui vai fazer as trocas, considerando n e n-1,
  7.         mova(n-1,a,c,b);//o objetivo aqui é levar o ultimo disco para o destino empilhando os demais discos em b
  8.         printf("Mova de %d para %d \n\n",a,c);
  9.         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
  10.     }
  11. }
  12. int main(){
  13.     int n,i,p2,m;//p2 é usada para calcular as potencias de 2, e m para saber a quantidade minima de movimentos
  14.     int a,b,c;//essas variaveis representam as tres hastes, 'a' euqivale a origem, 'b' equivale a haste auxiliar e 'c' é a destino
  15.     a=1;
  16.     b=2;
  17.     c=3;
  18.    
  19.    
  20.     printf("\nEntre com o numero de discos: ");
  21.     scanf("%d", &n);
  22.     p2=1;
  23.     for (i=0;i<n; i++){
  24.         p2=p2*2;
  25.     }
  26.     m=p2-1;
  27.     printf("\nUma execucao perfeita tera %d movimentos \n\n",m);
  28.     mova(n,a,b,c);
  29.     return 0;
  30.  
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement