Torre di Hanoi

Classe di test per il problema della torre di Hanoi

  • riceve da shell il numero di dischi nella prima torre
  • visualizza l’elenco delle mosse corrispondenti
public class TestaHanoi
{
    public static void main(String[] args)
    {
       int num=Integer.parseInt(args[0]);
 
       Hanoi(num, 1, 2, 3);
    }
 
    public static void Hanoi(int n, int origine, int appoggio, int destinazione)
    {
       if(n == 1)
          System.out.println(origine + " --> " + destinazione);
       else
       {
          Hanoi(n-1, origine , destinazione, appoggio    );
          Hanoi(1  , origine , appoggio    , destinazione);
          Hanoi(n-1, appoggio, origine     , destinazione);
       } 
    }
}

I tempi di attesa al variare del numero di dischi sono difficilmente confrontabili.
Utilizziamo il metodo System.currentTimeMillis() prima e dopo della chiamata del metodo Hanoi() per avere informazioni precise

public class TestaHanoi
{
   public static void main(String[] args)
   {
       int num=Integer.parseInt(args[0]);
       long prima=System.currentTimeMillis();
       Hanoi(num, 1, 2, 3);
       long dopo =System.currentTimeMillis();
       System.out.println("\n\n" + (dopo-prima)/1000.0 + " secondi...");
   }
   public static void Hanoi(int n, int origine, int appoggio, int destinazione)
   {
       if(n == 1)
          System.out.println(origine + " --> " + destinazione);
       else
       {
          Hanoi(n-1, origine , destinazione, appoggio    );
          Hanoi(1  , origine , appoggio    , destinazione);
          Hanoi(n-1, appoggio, origine     , destinazione);
       }
   }
}