using namespace std; #include #include #include "struct_stack.h" stack origine, ausiliario, destinazione; void inizializza_origine (int nd); void sposta (int n, stack & o, stack & a, stack & d); void stampa_situazione (); int main() { int num_dischi; cout << "Inserisci il numero dei dischi da spostare: "; cin >> num_dischi; init(origine); init(ausiliario); init(destinazione); inizializza_origine(num_dischi); cout << "Istruzioni per spostare " << num_dischi << " dischi dal piolo 1 al piolo 3 usando 2 come passaggio: " << endl; stampa_situazione(); sposta(num_dischi, origine, ausiliario, destinazione); return(0); } void inizializza_origine (int nd) { for (int i=nd; i>0; i--) if (push(i,origine)==FAIL) { cout << "Memoria esaurita!\n"; exit(0); } } void sposta (int n, stack & o, stack & a, stack & d) { int val; if (n==1) { top(val,o); pop(o); push(val,d); stampa_situazione(); } else { sposta(n-1, o, d, a); top(val,o); pop(o); push(val,d); stampa_situazione(); sposta(n-1, a, o, d); } } void stampa_situazione () { cout << "\nPiolo 1: "; print_reverse(origine); cout << "\nPiolo 2: "; print_reverse(ausiliario); cout << "\nPiolo 3: "; print_reverse(destinazione); cout << endl; }