// Esercizio

#include <stdlib.h>
#include <stdio.h>
#include "pila-by-lista.h"

void MuoviDisco (pila Origine, pila Destinazione);
void TorreDiHanoi (int NumeroElementi, pila Origine, pila Destinazione, pila Intermedio);

main()
{

  int i;
  int NumeroElementi = 5;


  pila Origine = CREAPILA();
  pila Destinazione = CREAPILA();
  pila Intermedio = CREAPILA();

  for (i = 0; NumeroElementi > i; i++)
    INPILA (NumeroElementi - i - 1, Origine);

  STAMPAPILA (Origine);
  TorreDiHanoi (NumeroElementi, Origine, Intermedio, Destinazione);
  STAMPAPILA (Destinazione);
    
  return;

}

void TorreDiHanoi (int NumeroElementi, pila Origine, pila Intermedio, pila Destinazione)
{

  if (NumeroElementi == 1)
    MuoviDisco (Origine, Destinazione);
  else {
    TorreDiHanoi (NumeroElementi - 1, Origine, Destinazione, Intermedio);
    MuoviDisco (Origine, Destinazione);
    TorreDiHanoi (NumeroElementi - 1, Intermedio, Destinazione, Origine);
  }

}

void MuoviDisco (pila Origine, pila Destinazione)
{
  int Disco;

  Disco = LEGGIPILA (Origine);
  FUORIPILA (Origine);
  INPILA (Disco, Destinazione);

}