[C]Torre di Hanoi

  • Autore discussione Autore discussione computer7
  • Data d'inizio Data d'inizio
Pubblicità
C

computer7

Ospite
Salve a tutti! Come dice il titolo ho un problema nella programmazione del codice per la Torre di Hanoi.
Praticamente devo creare una f(x) che mi permetta di ricevere in input il numero di dischi con cui giocare e i tre pioli A(partenza),B(ausiliario),C(arrivo).Devo restituire, con l'uso della ricorsione , le frasi che mi indicano la soluzione(Ad Esempio:
"Muovi il disco da A a C"
"Muovi il disco da C a B"... e via discorrendo)

Le frasi da restituire devono coincidere con il numero di mosse date dall'espressione 2[SUP]^n[/SUP]-1.

Il mio problema sta nel capire come diavolo faccio a stampare le mosse da fare!
Vi posto il codice che sto elaborando(UNA BOZZA):

MAIN

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void hanoi(int n, char from, char to, char aux );
int main(void)
{
int dischi;
char A,B,C;

printf("Con quanti dischi vuoi giocare?");
scanf("%d",&dischi);
printf("Il numero di mosse necessarie= %.f\n",pow(2,dischi)-1);
hanoi(dischi,'A','B','C');
system("PAUSE");
return 0;
}

FUNZIONE
void hanoi(int n, char from, char to, char aux ){

if(n==1){

printf("Spostare da %c a %c",from,to);

}
else{

hanoi(n-1,from,to,aux);
}
}
 
Se non ricordo male, il gioco prevede lo spostamento di cilindri di dimensioni sempre più piccole per formare una torre in un altro piolo giusto?
In questo caso dovresti crearti tre PILE, una per ogni piolo.
Le PILE ti ricordo sono strutture concatenate di tipo FIFO (First In First Out) ovvero l' elemento in cima è il primo ad essere scartato.
Il mio consiglio è di crearti tante pile quante sono i pioli richiesti (identificali con A, B, C...).
Per capire gli spostamenti, potresti crearti una struct contenente il campo origin (piolo di origine) e destination (piolo di destinazione) e poi arrivare alla soluzione tramite push() (immetti elemento) e pop() estrai elemento
 
Intanto ti ringrazio, però non sono ancora a questo livello....:muro: .
Non ho ancora affrontato le pile. Cmq so che può essere risolto cosi, con la ricorsione, ma non arrivo a capire come faccio a stampare le frasi utilizzando la stessa...

---------- Post added at 14:33 ---------- Previous post was at 14:27 ----------

Guarda,non ti preoccupare l'ho appena risolto....
Prima sbagliavo perchè chiamavo troppe volte la f(x) dentro se stessa....grazie ugualmente!
 
Pubblicità
Pubblicità
Indietro
Top