HACKING 120% {Hacking, programmazione, computer & molto altro}

Torri di Hanoi, :P

« Older   Newer »
  Share  
*Atwa*
view post Posted on 5/11/2011, 17:39     +1   -1




· Sono date tre torri (sinistra, centrale, destra) e
un certo numero 1 di dischi forati.
· I dischi hanno diametro diverso gli uni dagli altri,
e inizialmente sono infilati uno sull’altro (dal
basso in alto) dal più grande al più piccolo sulla
torre di sinistra.
· Scopo del gioco è portarli tutti sulla torre di destra, rispettando due regole:
a) si può muovere un solo disco alla volta;
b) un disco grande non può mai stare sopra
un disco più piccolo.
:)
 
Top
view post Posted on 5/11/2011, 17:46     +1   -1
Avatar

Water can take unforseen forms.

Group:
Founder
Posts:
5,273
Reputation:
+1,147
Location:
Shabang

Status:


Non hai fatto la domanda... poi non capisco... cioè, non è un algoritmo?

Con quattro dischi ce l' ho fatta...
 
Web  Top
*Atwa*
view post Posted on 5/11/2011, 18:21     +1   -1




CITAZIONE (Wet Water @ 5/11/2011, 17:46) 
Non hai fatto la domanda... poi non capisco... cioè, non è un algoritmo?

Con quattro dischi ce l' ho fatta...

CITAZIONE
· Scopo del gioco è portarli tutti sulla torre di destra, rispettando due regole:
a) si può muovere un solo disco alla volta;
b) un disco grande non può mai stare sopra
un disco più piccolo.

Si può risolvere con un algoritmo ricorsivo :)
 
Top
view post Posted on 5/11/2011, 18:27     +1   -1
Avatar

Water can take unforseen forms.

Group:
Founder
Posts:
5,273
Reputation:
+1,147
Location:
Shabang

Status:


Non capisco, cioè, io ne ho tre (dico questo perchè è più veloce):

l' uno nel 3
il 2 (cd) nel 2 (spazio)
l'1 nel 2
il 3 nel 3
l'1 nell' 1
il 2 nel 3
l' uno nel 3

Intendi così?
 
Web  Top
*Atwa*
view post Posted on 5/11/2011, 18:50     +1   -1




CITAZIONE (Wet Water @ 5/11/2011, 18:27) 
Non capisco, cioè, io ne ho tre (dico questo perchè è più veloce):

l' uno nel 3
il 2 (cd) nel 2 (spazio)
l'1 nel 2
il 3 nel 3
l'1 nell' 1
il 2 nel 3
l' uno nel 3

Intendi così?

Intendo:
Tower_of_Hanoi_4
 
Top
view post Posted on 5/11/2011, 19:03     +1   -1
Avatar

Water can take unforseen forms.

Group:
Founder
Posts:
5,273
Reputation:
+1,147
Location:
Shabang

Status:


Dai qualche indizio... non ci capisco niente su come fare l' algoritmo :(
 
Web  Top
*Atwa*
view post Posted on 5/11/2011, 19:14     +1   -1




CITAZIONE (Wet Water @ 5/11/2011, 19:03) 
Dai qualche indizio... non ci capisco niente su come fare l' algoritmo :(

http://it.wikipedia.org/wiki/Torre_di_Hanoi con tanto di soluzione :indifferente:
 
Top
view post Posted on 5/11/2011, 19:21     +1   -1
Avatar

Water can take unforseen forms.

Group:
Founder
Posts:
5,273
Reputation:
+1,147
Location:
Shabang

Status:


Ma io per le torri uso tre liste?
 
Web  Top
*Atwa*
view post Posted on 6/11/2011, 12:48     +1   -1




CITAZIONE (Wet Water @ 5/11/2011, 19:21) 
Ma io per le torri uso tre liste?

Sì, perché no :asd:
 
Top
S!cK
view post Posted on 9/11/2011, 18:23     +1   -1




beh, wikipedia la fa facile... alla fine l'unica funzione ricorsiva è quella degli spostamenti di n-1 blocchi...
 
Top
view post Posted on 9/11/2011, 18:29     +1   -1

Image and video hosting by TinyPic

Group:
Staffer onorari
Posts:
6,776
Reputation:
+5
Location:
Vicenza

Status:


lho fatto ad un mio amico con le monete 6 monete e lo ha fatto in 3 minuti nemmeno
 
Top
view post Posted on 28/11/2011, 21:15     +1   -1
Avatar

Water can take unforseen forms.

Group:
Founder
Posts:
5,273
Reputation:
+1,147
Location:
Shabang

Status:


Sono tanti 3 minuti...

Comunque domani lo risolvo
 
Web  Top
view post Posted on 1/9/2013, 21:47     +1   -1

Utente

Group:
Utenti UP
Posts:
43
Reputation:
0
Location:
Kernel.

Status:


E' un semplice algoritmo che si può risolvere facilmente con la ricorsione!

Ecco come si può creare un semplice programma (in C++ utilizzando una classe) in modo che l'utente inserisca il numero di dischi e che il programma dica tutte le mosse da fare per risolverlo!

-- Header --
#pragma once
class Hanoi
{
public:
CHanoi();
void spostaTorre(int i, int m, int f, int Dischi);
};

---- CPP -----

#include "Hanoi.h"
#include <iostream>
using namespace std;

CHanoi::CHanoi()
{

}

void Hanoi::spostaTorre(int i, int m, int f, int Dischi)
{

if(Dischi>1)
{
spostaTorre(i,m,f,Dischi-1);
spostaTorre(i,m,f,1);
spostaTorre(f,m,i,Dischi-1);
}
else
cout<<"Sposta il disco da " <<i <<" a " <<f; cout<<endl;
}

--- MAIN ---

include "Hanoi.h"
#include <iostream>
using namespace std;

void main()
{
int Dischi=0;

cout<<"Dimmi con quanti dischi vuoi giocare : ";
cin>>Dischi;

CHanoi *C1 = new Hanoi();
C1->spostaTorre(1,2,3,Dischi);
delete C1;
system("pause");
}

Fine ;)
 
Top
RootkitNeo
view post Posted on 1/9/2013, 23:04     +1   -1




Java
CODICE
import java.util.Scanner;

class Hanoi {
static void hanoi(int n,String A, String B, String C) {
  if(n>0) {
    hanoi(n-1, A, C, B);
    System.out.println("Dal "+A+" --> "+C);
    hanoi(n-1, B, A, C);
  }
}
public static void main(String args[]) {
  Scanner input = new Scanner(System.in);
  String primo="primo",secondo = "secondo",terzo="terzo";
  System.out.println("nInserisci il numero di dischi:");
  hanoi(input.nextInt(),primo,secondo,terzo);
}
}
 
Top
13 replies since 5/11/2011, 17:39   166 views
  Share