TORRE DI HANOI

di Anonimizzato23873 il
18 risposte
Salve, devo svolgere un'esercizio che mi richiede di stampare cosa succede in una determinata mossa della torre di hanoi. Ad esempio, voglio sapere che succede nella terza mossa, chiamando i pali "1","2","3", nella terza mossa potremmo avere 2 3, cioè ho spostato un disco dal palo centrale a quello finale..ho fatto l'algoritmo della torre di hanoi ma non so come stampare una determinata mossa..immagino che dovrei mettere un'if, ma non so come e dove..mi potete aiutare?

18 Risposte

  • Hai scritto il codice?
  • Si
    void hanoi(string A, string B, string C, int n)
    {
    	if(n==1)
    		cout<<A<<" "<<C<<endl;
    	else
    	{
    		hanoi(A,C,B,n-1);
    		cout<<A<<" "<<B<<endl;
    		hanoi(B,A,C,n-1);
    	}
    	
    };
  • E le cout a che servono ? Come mai le hai aggiunte?
  • Per stampare i passaggi, quindi come devo fare per stampare solo un determinata mossa?
  • Sono quelle le mosse
  • Lo so, però a me serve stampare solo una determinata mossa, non tutte, cioè a volte devo stampare solo la quinta, a volte solo la sesta, ecc.
  • Ciao darkman97

    io aggiungerei come parametro la mossa da stampare.
    void hanoi(string A, string B, string C, int n, int sn)
    {
    	if(n==1)
    		if (n==sn) cout<<A<<" "<<C<<endl;
    	else
    	{
    		hanoi(A,C,B,n-1, sn);
    		if (n==sn) cout<<A<<" "<<B<<endl;
    		hanoi(B,A,C,n-1, sn);
    	}
    	
    };
  • gurxsa ha scritto:


    Ciao darkman97

    io aggiungerei come parametro la mossa da stampare.
    void hanoi(string A, string B, string C, int n, int sn)
    {
    	if(n==1)
    		if (n==sn) cout<<A<<" "<<C<<endl;
    	else
    	{
    		hanoi(A,C,B,n-1, sn);
    		if (n==sn) cout<<A<<" "<<B<<endl;
    		hanoi(B,A,C,n-1, sn);
    	}
    	
    };
    Grazie, ho provato come hai detto e non stampa, ho provato con la chiamata hanoi("1","2","3",3,4); e non stampa niente..3 sono i dischi e 4 la mossa che voglio sapere..come si potrebbe sistemare?
  • Ci sono parecchi errori ... confondi il numero del disco con il numero di mossa ... l'ultima chiamata alla hanoi è sbagliata ... ci vuole un contatore delle mosse che manca ... in pratica
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int mossa = 0;
    
    void hanoi(string A, string B, string C, int n, int sn)
    {
    	if (n == 1)
    	{
    		mossa++;
    		if (mossa == sn) 
    			cout << "Mossa " << mossa << " ... Disco " << n << " da " << A << " in " << B << endl;
    	}
    	else
    	{
    		hanoi(A, C, B, n - 1, sn);
    		mossa++;
    		if (mossa == sn) 
    			cout << "Mossa " << mossa << " ... Disco " << n << " da " << A << " in " << B << endl;	
    		hanoi(C, B, A,  n - 1, sn);
    	}
    }
    
    int main()
    {
    	hanoi("A", "B", "C", 3, 4);
    }
    
  • Ah ecco, grazie all'aiuto di una variabile globale, non ci avrei mai pensato di far così..grazie mille, perfetto
  • Si ma guarda le linee modificate rispetto al tuo codice....
  • Ho visto e non capisco perchè a volte funziona bene, a volte no, in particolare con la chiamata hanoi("1","2","3",7,6) stampa 2 1, quando invece dovrebbe darmi 2 3, invece con la chiamata hanoi("1","2","3",3,3) mi da la giusta mossa. Perchè?
  • In un caso hai 7 dischi nell'altro 3 e quindi le mosse sono diverse...
  • Forse non mi sono spiegato bene..l'algoritmo non da il giusto risultato, cioè a volte restituisce un risultato esatto(quindi mossa esatta) e a volte sbagliata e non capisco perchè..
    [Modifica]
    Era sbagliata la cout dell'else che doveva essere cout<<A<<" "<<C;
    Ora è corretto, grazie mille.
Devi accedere o registrarti per scrivere nel forum
18 risposte