Diberdayakan oleh Blogger.
RSS
Post Icon

Towers Of Hanoi

TOWERS OF HANOI ( MENARA HANOI )


Menara Hanoi ialah salah satu permainan yang dulunya dimainkan oleh seorang pendeta di Hanoi . Tujuan permainan ini ialah memindahkan n buah pringan dari tonggak asal (A) melalui tonggak bantu (B) menuju tonggak tujuan (C) .Dengan aturan – aturan bahwa piringan yang lebih kecil tidak boleh berada di bawah piringan yang lebih besar .


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVOUCfTRK-M2V0wP-bvZc27nfk8ZeH9EAj9euRJyutJ39glgmXkSufM4aMxUdAR2XOJkkz9L6oGTQ-S1g1E9cF8hnptZU6dyNw6K6bQdd4EWRQl0JK45T7J9rLjLAVKMibQqcipkAePPjH/s320/menara+hanoi.PNG

Asal
Teka-teki ini ditemukan Édouard Lucas, ahli matematika Perancis di tahun 1883. Ada sebuah legenda tentang candi Indian yang berisi ruang besar dengan tiga tiang yang dikelilingi 64 cakram emas. Pendeta Brahma, melaksanakan tugas dari peramal di masa lalu, sesuai dengan aturan teka-teki ini. Menurut legenda ini, bila teka-teki ini diselesaikan, dunia akan kiamat. Tidak jelas benar apakah Lucas menemukan legenda ini atau terinspirasi olehnya. Bila legenda ini benar, dan pendeta itu bisa memindahkan satu cakram tiap detik, menggunakan pemindahan paling sedikit, maka akan memakan waktu 264−1 detik atau kurang lebih 584,582 milyar tahun.

Tujuan
Dari teka-teki ini adalah untuk memindahkan seluruh tumpukan ke tiang yang lain, mengikuti aturan berikut:
  • Hanya satu cakram yang boleh dipindahkan dalam satu waktu.
  • Setiap perpindahan berupa pengambilan cakram teratas dari satu tiang dan memasukkannya ke tiang lain, di atas cakram lain yang mungkin sudah ada di tiang tersebut.
  • Tidak boleh meletakkan cakram di atas cakram lain yang lebih kecil.


Penerapan
Permainan Menara Hanoi sering digunakan dalam penelitian psikologis dalam hal pemecahan masalah. Selain itu, juga sering digunakan dalam pengajaran algorima rekursif bagi pelajar pemrograman. Permainan ini juga digunakan sebagai ujian ingatan oleh ahli psikolog syaraf dalam berupaya mengevaluasi amnesia.


SOURE CODE
<*>=
import java.io.*;

public class hanoiA
{
  static int moves=0; //number of moves so far
}

Method getInt is used to read an integer from the user terminal.
.
<method getInt>=
static int getInt()
     {
         String line;
         BufferedReader in = 
         new BufferedReader(new InputStreamReader(System.in)); 
         try
         {
            line = in.readLine();
            int i = Integer.valueOf(line).intValue();
            return i;
         }
         catch (Exception e)
         {
            System.err.println("***Error: Input is not a number.\n" +
                               "Input assumed to be the number 1");
            return 1;
         }
     } 
 
 
 
Method hanoi is the kernel of the program---it ``performs'' the moves.
 
<method hanoi>=
     static void hanoi(int   height,
                char  fromPole,
                char  toPole,
                char  withPole)
     {
         if (height >= 1)
         {
            hanoi(height-1, fromPole, withPole, toPole); 
            moveDisk(fromPole, toPole);
            hanoi(height-1, withPole, toPole, fromPole);
         }
     }
 
 
 
 
 
Method moveDisk simply print on the terminal each move. 
<method moveDisk>=
     static void moveDisk(char fromPole, char toPole)
     {
          moves++;
          System.out.print(fromPole);
          System.out.print(toPole);
          System.out.print(((moves % 20)==0) ? '\n' : ' ');
     } 
 
Method main is there where the whole action is. 
<method main>=
     public static void main(String[] args)
     {
          long time1, time2; //for benchmarking
          int TowerHeight;
          char FromPole='A', ToPole='B', WithPole='C';
 
          System.out.println("Enter Tower height...");
          System.out.print("?");
          TowerHeight = getInt();
          time1 = System.currentTimeMillis();
          hanoi(TowerHeight, FromPole, ToPole, WithPole);
          time2 = System.currentTimeMillis();
          System.out.println();
          System.out.print(time2-time1); //print execution time in msec
          System.out.println(" msec execution time");
     }
 







                   
               


                                 


















SUMBER :




http://youtu.be/hVVjEKn21Lo

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 komentar:

Posting Komentar