TORRE DI HANOI

di il
18 risposte

TORRE DI HANOI

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

  • Re: TORRE DI HANOI

    Hai scritto il codice?
  • Re: TORRE DI HANOI

    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);
    	}
    	
    };
  • Re: TORRE DI HANOI

    E le cout a che servono ? Come mai le hai aggiunte?
  • Re: TORRE DI HANOI

    Per stampare i passaggi, quindi come devo fare per stampare solo un determinata mossa?
  • Re: TORRE DI HANOI

    Sono quelle le mosse
  • Re: TORRE DI HANOI

    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.
  • Re: TORRE DI HANOI

    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);
    	}
    	
    };
  • Re: TORRE DI HANOI

    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?
  • Re: TORRE DI HANOI

    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);
    }
    
  • Re: TORRE DI HANOI

    Ah ecco, grazie all'aiuto di una variabile globale, non ci avrei mai pensato di far così..grazie mille, perfetto
  • Re: TORRE DI HANOI

    Si ma guarda le linee modificate rispetto al tuo codice....
  • Re: TORRE DI HANOI

    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è?
  • Re: TORRE DI HANOI

    In un caso hai 7 dischi nell'altro 3 e quindi le mosse sono diverse...
  • Re: TORRE DI HANOI

    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