Subscribe:

Kamis, 15 Maret 2012

Tower Of Hanoi

Menara Hanoi adalah sebuah permainan matematis atau teka-teki. Permainan ini terdiri dari tiga tiang dan sejumlah cakram dengan ukuran berbeda-beda yang bisa dimasukkan ke tiang mana saja. Permainan dimulai dengan cakram-cakram yang tertumpuk rapi berurutan berdasarkan ukurannya dalam salah satu tiang, cakram terkecil diletakkan teratas, sehingga membentuk kerucut.

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.

Permainan Tower of Hanoi atau Menara Hanoi merupakan permainan klasik yang sudah sangat sering digunakan sebagai contoh permasalahan yang dapat diselesaikan dengan cara rekursi.
Secara singkat Menara Hanoi adalah permainan untuk memindahkan n piringan dari tiang A ke tiang C dengan tiang bantu B, dimana kepingan yang lebih besar harus berada di bawah kepingan yang lebih kecil.

Gambaran Menara Hanoi 
Gambaran Menara Hanoi

Animasi pemecahan Menara Hanoi. 

Ini adalah contoh kode java :
/**
 * TowersOfHanoi.java
 * Created by Stijn Strickx on Aug. 12 2006
 * Copyright 2006 Stijn Strickx, All rights reserved
 */

import java.io.*;

public class TowersOfHanoi {

 static int moves = 0;
 static int totalDisks = 0;
 
 public static void main(String[] arguments) throws java.io.IOException {
  int disks;
  char fromPole = 'A';
  char withPole = 'B';
  char toPole = 'C';
  disks = getNumber("\nHow many disks are there on the tower? ");
  totalDisks = disks;
  if(totalDisks > 10){
   System.out.println("Working...");
   }
  FileOutputStream fos = new FileOutputStream("TowersOfHanoiSolution.txt");
  PrintStream ps = new PrintStream(fos);
  solveHanoi(disks, fromPole, toPole, withPole, ps);
  ps.close();
  System.out.println();
  System.out.println("\nAmount of moves: " + moves + "\n");
  System.out.print("You can now access the TowersOfHanoiSolution.txt file");
  System.out.println(" which is in the same directory as the .class file of this program.");
  }
 
 static void solveHanoi(int disks, char fromPole, char toPole, char withPole, PrintStream ps) {
  if (disks >= 1) {
   solveHanoi(disks-1, fromPole, withPole, toPole, ps);
   moveDisk(fromPole, toPole, ps);
   solveHanoi(disks-1, withPole, toPole, fromPole, ps);
   }
  }
  
 static void moveDisk(char fromPole, char toPole, PrintStream ps) {
  moves++;
  if(totalDisks <= 10){
   System.out.print("Move from " + fromPole + " to " + toPole + ". ");
   ps.print("Move from " + fromPole + " to " + toPole + ". ");
   if (moves%4 == 0){
    System.out.println();
    ps.println();
    }
   }
   else {
   ps.print("Move from " + fromPole + " to " + toPole + ". ");
   if (moves%4 == 0){
    ps.println();
    }
   }
  }
 
 static int getNumber(String question) throws java.io.IOException {
  String theNumber;
  int number = 0;
  BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
  System.out.print(question);
  theNumber = in.readLine();
  System.out.println();
  number = Integer.parseInt(theNumber);
  return number;
  }
 }
Dan ini lah video tentang Tower of Hanoi :


2 komentar:

giriayoga mengatakan...

sewaktu semester 1 dulu :D

Vicky Andreas mengatakan...

haha. .iah mas, tp tuh aq dpt pas smes 2, yg ngajar pak cahyo. .hehe

Posting Komentar