Torre de Hanoi em Applet

Javaneses…

Acredito que todos aki já viraum como funciona a torre de hanoi…

Gostaria de saber como poderia iniciar um projeto onde será possivel utilizar a quantidade de discos que o usuário quiser…

Se alguém conhecer algum site…

aradeço desde já!

Obrigado.

tinha pensado em fazer isso uma vez… mas seria meio diferente… hehe

Minha ideia era colocar um comp ligado 24h (um comp meia boca, tipo pentium 1) resolvendo uma torre de hanoi de vaaarios discos (cada movimento demoraria tipo 0,5 segundo) e esse comp seria um servidorzinho web, e vc poderia ir acompanhando o progresso dele pela web… hehe

A ideia era deixar ele la, rodando durante anos… hehehe

Porque fazer isso ? Ah, sei la, por pura diversão 8)

rs**** hehehehe

só para ver se é verdade que os 64 discos vaum para o outro pino quando o sol se apagar ou coisa assim…rs***** :stuck_out_tongue:

Já ouvi falar dessa torre mais naum sei exatamente como funciona a coisa… alguem poderia me explicar???

Dennys,vá em www.matematica.br/programas/hanoi ou em
http://www.mat.ufrgs.br/~edumatec/atividades/sugest.htm

Own Prison,
Torres De Hanoi consiste num problema inventado por um matemático francês,q consiste em 3 hastes A,B e C sendo q em A existem 64 discos concentricos(do maior,na base; ao menor no topo).O problema consiste em mover os discos da haste de origem(“A”) a haste de destino “C”.Deve-se usar B como haste temporaria obedecendo 3 regras:1-nunca colocar um disco maior sobre um menor,2-Só se move um disco por vez e 3-nunca colocar o disco num outro lugar q não seja as 3 hastes.
E vc deve fazer isso com o menor numero possivel de movimentos.
Se quiser testar pra ver como funciona,faça só c/3 discos.

No livro: Java Como Programar Deitel & Deitel da editora BookMan tem uma implementação interessante das torres de Hanoi.

Infelizmente não consegui encontrar agora. Assim que achar eu fornceço.

A solução é recursividade, certo? Então tem que ter o caso básico… Qual é ele? (origem -> destino) E o que deve ser feito para chegar lá?

Se quero passar de A para C, então eu faço A -> B, A-> C, B -> C… Aonde temos uma origem (A), destino © e um auxiliar (B).

Ficaria assim, mais ou menos (não conferi), aonde n é o número de discos inicialmente.

transfere(n, origem, destino, auxiliar) {
   if (n == 1)
      // move disco da origem para o destino
      System.out.println(origem + " -> " + destino);
   else {
      transfere(n-1, origem, auxiliar, destino);
      // move disco da origem para o destino
      System.out.println(origem + " -> " + destino);
      transfere(n-1), auxiliar, destino, origem);
   }
}

Teste esse applet (do Livro do Deitel)

import java.awt.;
import java.awt.event.
;
import javax.swing.*;

public class Hanoi extends JApplet implements ActionListener {
JLabel prompt;
JTextField input;
JTextArea outputArea;
JScrollPane scroller;

public void init()
{
prompt = new JLabel( "Numero de discos: " );
input = new JTextField( 10 );
input.addActionListener( this );
outputArea = new JTextArea( 10, 20 );
scroller = new JScrollPane( outputArea );
Container c = getContentPane();
c.setLayout( new FlowLayout() );

c.add( prompt );
c.add( input );

c.add( scroller );

}

public void actionPerformed( ActionEvent e )
{
tower( Integer.parseInt( e.getActionCommand() ), 1, 2, 3 );
}

public void tower( int numero_discos, int disco_inicial,
int disco_destino, int disco_temporario )
{
if ( numero_discos == 1 )
outputArea.append( "
" + disco_inicial + " -> " + disco_destino );
else{
tower( numero_discos - 1, disco_inicial, disco_temporario, disco_destino );
outputArea.append( "
" + disco_inicial + " -> " + disco_destino );
tower( numero_discos - 1, disco_temporario, disco_destino, disco_inicial );
}
}
}

desculpe o amadorismo…

mais quando tentei rodar este exemplo

ele pede um metodo principal.

Luz ??
[]s

Que coincidência! Fiz isso em 2004 e ainda tenho o applet na página da minha área na faculdade.

Clique aqui:

http://www.lcc.ufrn.br/~tnaires/arquivos/java/hanoi/

Ops, não vi a data do tópico… Bom, espero que seja útil pra alguém.