Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/01/2015, 02:38
inazense
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Torres de Hanoi gráficas recursivas

Ya lo solucioné, me equivoqué en el movimiento de O a A. Puse A[i]=1 en vez de A[j]=1. De todas formas lo he vuelto a tratar de la siguiente manera la función.

Código C:
Ver original
  1. int moverDisco(int discos,int O[VALOR],int A[VALOR],int D[VALOR],char o, char d) {
  2.  
  3.     int i,j,salida1=0,salida2=0;
  4.  
  5.     i=VALOR;
  6.     j=-1;
  7.  
  8.     if (o=='o'){
  9.         if (d=='a'){ // Torre origen O, torre destino A
  10.             while (salida1==0) {
  11.                 i--;
  12.                 if (O[i]!=0)
  13.                     salida1=1;
  14.                 if (i==0)
  15.                     salida1=1;
  16.             }
  17.             while (salida2==0) {
  18.                 j++;
  19.                 if (A[j]==0)
  20.                     salida2=1;
  21.                 if (j==VALOR-1)
  22.                     salida2=1;
  23.             }
  24.             A[j]=O[i];
  25.             O[i]=0;
  26.         }
  27.         if (d=='d'){ // Torre origen O, torre destino D
  28.             while (salida1==0) {
  29.                 i--;
  30.                 if (O[i]!=0)
  31.                     salida1=1;
  32.                 if (i==0)
  33.                     salida1=1;
  34.             }
  35.             while (salida2==0) {
  36.                 j++;
  37.                 if (D[j]==0)
  38.                     salida2=1;
  39.                 if (j==VALOR-1)
  40.                     salida2=1;
  41.             }
  42.             D[j]=O[i];
  43.             O[i]=0;
  44.         }
  45.     }
  46.     if (o=='a'){
  47.         if (d=='o'){ // Torre origen A, torre destino O
  48.             while (salida1==0) {
  49.                 i--;
  50.                 if (A[i]!=0)
  51.                     salida1=1;
  52.                 if (i==0)
  53.                     salida1=1;
  54.             }
  55.             while (salida2==0) {
  56.                 j++;
  57.                 if (O[j]==0)
  58.                     salida2=1;
  59.                 if (j==VALOR-1)
  60.                     salida2=1;
  61.             }
  62.             O[j]=A[i];
  63.             A[i]=0;
  64.         }
  65.         if (d=='d'){ // Torre origen A, torre destino D
  66.             while (salida1==0) {
  67.                 i--;
  68.                 if (A[i]!=0)
  69.                     salida1=1;
  70.                 if (i==0)
  71.                     salida1=1;
  72.             }
  73.             while (salida2==0) {
  74.                 j++;
  75.                 if (D[j]==0)
  76.                     salida2=1;
  77.                 if (j==VALOR-1)
  78.                     salida2=1;
  79.             }
  80.  
  81.             D[j]=A[i];
  82.             A[i]=0;
  83.         }
  84.     }
  85.     if (o=='d'){
  86.         if (d=='a'){ // Torre origen D, torre destino A
  87.             while (salida1==0) {
  88.                 i--;
  89.                 if (D[i]!=0)
  90.                     salida1=1;
  91.                 if (i==0)
  92.                     salida1=1;
  93.             }
  94.             while (salida2==0) {
  95.                 j++;
  96.                 if (A[j]==0)
  97.                     salida2=1;
  98.                 if (j==VALOR-1)
  99.                     salida2=1;
  100.             }
  101.  
  102.             A[j]=D[i];
  103.             D[i]=0;
  104.         }
  105.         if (d=='o'){ // Torre origen D, torre destino O
  106.             while (salida1==0) {
  107.                 i--;
  108.                 if (D[i]!=0)
  109.                     salida1=1;
  110.                 if (i==0)
  111.                     salida1=1;
  112.             }
  113.             while (salida2==0) {
  114.                 j++;
  115.                 if (O[j]==0)
  116.                     salida2=1;
  117.                 if (j==VALOR-1)
  118.                     salida2=1;
  119.             }
  120.  
  121.             O[j]=D[i];
  122.             D[i]=0;
  123.         }
  124.     }
  125.  
  126.     imprime(O,A,D);
  127.     getchar();
  128. }