// Rocco Meli, 16.04.2010
// Torri di Hanoi
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <cmath>
// Dichiarazione variabili
int anelli;
int sorgente;
int destinazione;
int ausiliario;
// Prototipi di funzioni
void soluzionehanoi (int, int, int, int);
int main()
{
// Dichiarazione variabili locali
unsigned long mosse;
std::cout << std::endl;
std::cout << " TORRI DI HANOI" << std::endl;
std::cout << std::endl;
// Assegnazione numeri alle torri
std::cout << "Inserisci gli anelli da spostare: ";
std::cin >> anelli;
std::cout << std::endl;
std::cout << "Numero torre iniziale: ";
std::cin >> sorgente;
std::cout << std::endl;
std::cout << "Numero torre finale: ";
std::cin >> destinazione;
std::cout << std::endl;
std::cout << "Numero torra ausiliaria: ";
std::cin >> ausiliario;
std::cout << std::endl;
mosse = pow(2, anelli) - 1;
std::cout << "Serviranno " << mosse << " mosse per completare il gioco!" << std::endl;
std::cout << std::endl;
soluzionehanoi(anelli, sorgente, destinazione, ausiliario);
return 0;
}
// Funzione Hanoi
void soluzionehanoi (int anelli, int sorgente, int destinazione, int ausiliario)
{
if (anelli < 1)
{
return;
}
else
{
soluzionehanoi (anelli - 1, sorgente, ausiliario, destinazione);
std::cout << sorgente << " -> " << destinazione << std::endl;
soluzionehanoi (anelli - 1, ausiliario, destinazione, sorgente);
return;
}
}
