void risolvi_hanoi(int N,char* A,char* B,char* C)
{
if(N==1)
printf("sposta il disco %d da %s a %s\n",N,A,C);
else
{
risolvi_hanoi(N-1,A,C,B);
printf("sposta il disco %d da %s a %s\n",N,A,C);
risolvi_hanoi(N-1,B,A,C);
}
}
Se la osserviamo bene,notiamo che questa funzione applica proprio il procedimento appena
esposto per risolvere il problema con un numero arbitrario N di dischi.
risolvi_hanoi(5,"A","B","C");
Il programma listerà nell'ordine tutte le mosse necessarie a risolvere una Torre di Hanoi
a 5 dischi e cioè
sposta il disco 1 da A a C
sposta il disco 2 da A a B
sposta il disco 1 da C a B
sposta il disco 3 da A a C
sposta il disco 1 da B a A
sposta il disco 2 da B a C
sposta il disco 1 da A a C
sposta il disco 4 da A a B
sposta il disco 1 da C a B
sposta il disco 2 da C a A
sposta il disco 1 da B a A
sposta il disco 3 da C a B
sposta il disco 1 da A a C
sposta il disco 2 da A a B
sposta il disco 1 da C a B
sposta il disco 5 da A a C
sposta il disco 1 da B a A
sposta il disco 2 da B a C
sposta il disco 1 da A a C
sposta il disco 3 da B a A
sposta il disco 1 da C a B
sposta il disco 2 da C a A
sposta il disco 1 da B a A
sposta il disco 4 da B a C
sposta il disco 1 da A a C
sposta il disco 2 da A a B
sposta il disco 1 da C a B
sposta il disco 3 da A a C
sposta il disco 1 da B a A
sposta il disco 2 da B a C
sposta il disco 1 da A a C
Provare per credere ;)
A->C
Abbiamo la nostra radice del problema.Dividiamo questa operazione in due derivazioni,
una superiore del tipo RS->x e una inferiore del tipo x->RD,dove RS è
l'asta sorgente nella radice,RD è l'asta destinazione nella radice e x è l'asta rimanente.
Nel nostro caso avremo
A->B
A->C
B->C
Abbiamo aggiunto un livello al nostro problema,facciamo la stessa cosa per le due
derivazioni della radice
A->C
A->B
C->B
A->C
B->A
B->C
A->C
E iterando sulle quattro nuove derivazioni avremo
A->B
A->C
B->C
A->B
C->A
C->B
A->B
A->C
B->C
B->A
C->A
B->C
A->B
A->C
B->C
Si prosegue così fino all'N-esimo livello,ottenendo per N = 5 un grafo così fatto
A->C
A->B
C->B
A->C
B->A
B->C
A->C
A->B
C->B
C->A
B->A
C->B
A->C
A->B
C->B
A->C
B->A
B->C
A->C
B->A
C->B
C->A
B->A
B->C
A->C
A->B
C->B
A->C
B->A
B->C
A->C
Bene,se ora leggi le operazioni in ordine crescente di riga avrai la soluzione della Torre di Hanoi con 5 dischi :D