Tower Hanoi

Seperti yang kita ketahui mengenai Nama menara yang di sebut sebagai "Tower of Hanoi" adalah Menara Hanoi. Menara Hanoi ini 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.
Untuk menyelesaikan puzzle di atas dalam pemrograman, kita dapat menggunakan teknik rekursif. Rekursif adalah fungsi atau prosedure yang dapat memanggil dirinya sendiri.
Jadi algoritmanya adalah …

FUNCTION MoveTower(disk, source, dest, spare):

IF disk == 0, THEN:

    move disk from source to dest

ELSE:

    MoveTower(disk - 1, source, spare, dest)   // Step 1 above

    move disk from source to dest              // Step 2 above

    MoveTower(disk - 1, spare, dest, source)   // Step 3 above

END IF


Contoh program C++
#include<iostream>
using namespace std;
void MenaraHanoi(int N, char asal, char bantu, char tujuan);
int main()
{int piringan;
    cout<< "\nPROGRAM MENARA HANOI\n";
    cout<< "--------------------\n\n";
    cout<< "Banyaknya piringan: ";
    cin >> piringan;
    cout<< endl;
    MenaraHanoi(piringan,'A','B','C');
    return 0;
}
void MenaraHanoi(int N, char asal, char bantu, char tujuan)
{
    if(N == 1)
        cout<<"Piringan 1 dari "<<asal<< " ke " << tujuan <<endl;
    else
        {
            MenaraHanoi(N-1,asal,tujuan, bantu);
            cout<<"Piringan " << N <<" dari " << asal << " ke " << tujuan<<endl;
            MenaraHanoi(N-1, bantu, asal, tujuan);
        }
}
Outputnya adalah
Sekian informasi yang dapat saya berikan, apabila terdapat kekeliruan mohon kritik dan sarannya. Akhir kata saya ucapkan terima kasih sudah berkunjung

Komentar

Postingan populer dari blog ini

Flowchart

Tipe Data dan karakter khusus C++

Instalasi dan Review Linux Ubuntu 16.04 LTS