Fundamentos da Torre de Hanoi

Propaganda
Aula Teste
INFNET
terça-feira, 11 de janeiro de 2011
IMPLEMENTAÇÃO DA TORRE DE
HANOI NA LINGUAGEM JAVA
Prof. Alex Avellar
[email protected]
Objetivo



Apresentar os conceitos fundamentais da Torre de
Hanoi
Apresentar o algoritmo para resolução do problema
Realizar uma implementação em Linguagem Java do
Algoritmo proposto
2
Pré-requisitos


Conhecimentos em Programação
Conhecimentos em comandos básicos da linguagem
Java
3
Apresentações

Experiência

Expectativa

Motivação

Material de Apoio: www.aavellar.com
4
Sumário






Objetivo
Fundamentos da Torre de Hanoi
Descrição do Algoritmo
Conceitos da Linguagem Java
Implementação da solução
Conclusão
5
Bibliografia

1) PREISS, Bruno R. , Estruturas de Dados e Algoritmos: padrões de
projetos orientados a objetos com java, 2000.

2) FURGERI, S., Java 6 – Desenvolvendo e Implementando
Aplicações, Érica , 2009.

3) SEDGEWICK, R., Algorithms in Java, Addison – Wesley, 2003.

4) TOWER OF HANOI: Fascinating Facts (LHS):
http://www.lhs.berkeley.edu/Java/Tower/towerhistory.html
6
1. Torre de Hanoi
Fundamentos da Torre de Hanoi
Fonte: TOWER OF HANOI
 Edouard Lucas
 Lenda Hindu
 Torre de Bramanismo
 Jovens Monges
 Discos de Ouro
 De Parville
 64 Níveis
 Templo de Bernares
 Centro do Mundo
 Hastes de Diamante e Discos finos como o corpo
8
de uma abelha
Limitações
2. Algoritmo
Algoritmo
12
3. Implementação
Implementação da Torre de
Hanoi na linguagem Java
import java.util.*;
else
public class Hanoi
{
{
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
public void movimentar (int ndiscos,
Stack t1, Stack t2, Stack t3)
{
if( ndiscos == 1 )
{
t3.push(t1.peek());
t1.pop();
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
}
movimentar (ndiscos -1, t1, t3, t2);
t3.push(t1.peek());
t1.pop();
movimentar (ndiscos -1, t2, t1, t3);
}
}
14
Implementação da Torre de
Hanoi na linguagem Java
import java.util.*;
else
public class Hanoi
{
{
public void movimentar (int ndiscos,
Stack t1, Stack t2, Stack t3)
{
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
if( ndiscos == 1 )
movimentar (ndiscos -1, t1, t3, t2);
t3.push(t1.peek());
t1.pop();
{
t3.push(t1.peek());
t1.pop();
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
}
movimentar (ndiscos -1, t2, t1, t3);
}
}
15
Implementação da Torre de
Hanoi na linguagem Java
import java.util.*;
else
public class Hanoi
{
{
public void movimentar (int ndiscos,
Stack t1, Stack t2, Stack t3)
{
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
if( ndiscos == 1 )
movimentar (ndiscos -1, t1, t3, t2);
t3.push(t1.peek());
t1.pop();
{
t3.push(t1.peek());
t1.pop();
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
}
movimentar (ndiscos -1, t2, t1, t3);
}
}
16
Implementação da Torre de
Hanoi na linguagem Java
public static void main(String args[])
{
Hanoi obj = new Hanoi ();
// Numero total de discos
int ndiscos = 3;
// Instancia Vetor pinos
Stack Pino[] = new Stack [3];
// Instancia Pinos
for (int i = 0; i < 3; i++)
{
Pino[i] = new Stack();
}
// Entra com valores
for (int i = ndiscos; i > 0; i--)
{
Pino[0].push(new Integer(i));
}
obj.movimentar(ndiscos, Pino[0], Pino[1], Pino[2]);
}
}
17
Implementação da Torre de
Hanoi na linguagem Java
public static void main(String args[])
{
Hanoi obj = new Hanoi ();
// Numero total de discos
int ndiscos = 3;
// Instancia Vetor pinos
Stack Pino[] = new Stack [3];
// Instancia Pinos
for (int i = 0; i < 3; i++)
{
Pino[i] = new Stack();
}
// Entra com valores
for (int i = ndiscos; i > 0; i--)
{
Pino[0].push(new Integer(i));
}
obj.movimentar(ndiscos, Pino[0], Pino[1],
Pino[2]);
}
}
18
Implementação da Torre de
Hanoi na linguagem Java
public static void main(String args[])
{
Hanoi obj = new Hanoi ();
// Numero total de discos
int ndiscos = 3;
// Entra com valores
for (int i = ndiscos; i > 0; i--)
{
Pino[0].push(new
Integer(i));
}
// Instancia Vetor pinos
obj.movimentar(ndiscos, Pino[0], Pino[1],
Pino[2]);
// Instancia Pinos
for (int i = 0; i < 3; i++)
{
}
Stack Pino[] = new Stack [3];
Pino[i] = new Stack();
}
}
19
Implementação da Torre de
Hanoi na linguagem Java
public static void main(String args[])
{
Hanoi obj = new Hanoi ();
// Numero total de discos
int ndiscos = 3;
// Instancia Vetor pinos
Stack Pino[] = new Stack [3];
// Instancia Pinos
for (int i = 0; i < 3; i++)
{
Pino[i] = new Stack();
}
// Entra com valores
for (int i = ndiscos; i > 0; i--)
{
Pino[0].push(new Integer(i));
}
obj.movimentar(ndiscos,
Pino[0], Pino[1], Pino[2]);
}
}
20
Implementação da Torre de
Hanoi na linguagem Java
public void movimentar (int
ndiscos, Stack t1, Stack t2,
Stack t3)
{
if( ndiscos == 1 )
{
t3.push(t1.peek());
t1.pop();
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
}
else
{
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
movimentar (ndiscos -1, t1, t3, t2);
t3.push(t1.peek());
t1.pop();
movimentar (ndiscos -1, t2, t1, t3);
}
}
21
Implementação da Torre de
Hanoi na linguagem Java
public void movimentar (int ndiscos, Stack t1, Stack
t2, Stack t3)
{
if( ndiscos == 1 )
{
t3.push(t1.peek());
t1.pop();
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
}
else
{
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
movimentar (ndiscos -1, t1, t3, t2);
t3.push(t1.peek());
t1.pop();
movimentar (ndiscos -1, t2, t1, t3);
}
}
22
Implementação da Torre de
Hanoi na linguagem Java
else
public void movimentar (int ndiscos,
Stack t1, Stack t2, Stack t3)
{
{
if( ndiscos == 1 )
{
t3.push(t1.peek());
t1.pop();
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
}
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
movimentar (ndiscos -1, t1, t3, t2);
t3.push(t1.peek());
t1.pop();
movimentar (ndiscos -1, t2, t1, t3);
}
}
23
Implementação da Torre de
Hanoi na linguagem Java
else
{
System.out.println("Pino 1: "+ t1 );
System.out.println("Pino 2: "+ t2 );
System.out.println("Pino 3: "+ t3 );
System.out.println("");
movimentar (ndiscos -1, t1, t3, t2);
t3.push(t1.peek());
t1.pop();
movimentar (ndiscos -1, t2, t1, t3);
}
}
24
•
Exercício
–
Reescreva o algoritmo da Torre de Hanoi
apresentado a solução de forma iterativa, ou seja
usando estrutura de repetições (laços)
–
Codifique em Linguagem Java
–
Entre no link abaixo e envie o algoritmo criado e
o programa final
–
www.aavelar.com
5. Conclusões e
Perguntas
Download