ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
MENARA
HANOI
www.awowawa.com
PERMASALAHAN
ATURAN MAIN
Memindahkan semua piringan
dari ke tiang lain
Hanya boleh memindahkan
satu piringan setiap
pemindahan
Tidak boleh ada piringan yang
lebih besar di atas piringan
kecil
XASAL PERANTARA TUJUAN
SOLUSI UNTUK SATU PIRINGAN
ASAL PERANTARA TUJUAN
A B C
• Pindahkan piringan dari A ke C
SOLUSI UNTUK DUA PIRINGAN
ASAL PERANTARA TUJUAN
A B C
• Pindahkan piringan dari A ke B menggunakan C
1
2
• Pindahkan piringan dari A ke C
• Pindahkan piringan dari B ke C menggunakan A
SOLUSI UNTUK TIGA PIRINGAN
ASAL PERANTARA TUJUAN
A B C
• Pindahkan dua piringan dari A ke B menggunakan C
1
2
• Pindahkan piringan dari A ke C
• Pindahkan dua piringan dari B ke C menggunakan A
3
SOLUSI UNTUK N PIRINGAN
ASAL PERANTARA TUJUAN
A B C
• Pindahkan n-1 piringan dari A ke B menggunakan C
1
2
• Pindahkan piringan dari A ke C
• Pindahkan n-1 piringan dari B ke C menggunakan A
3
FUNGSI HANOI
ASAL PERANTARA TUJUAN
A B C
1
2
3
void Hanoi (int n, int A, int B, int C) {
if (n>0) {
Hanoi(n-1, A, C, B);
cout<<"Pindahkan piringan dari "<<A<<" ke "<<C;
Hanoi(n-1, B, A, C);
}
}
PROGRAM
• Pindahkan n-1 piringan dari A ke B menggunakan C
• Pindahkan piringan dari A ke C
• Pindahkan n-1 piringan dari B ke C menggunakan A
void Hanoi (int n, int A, int B, int C) {
if (n>0) {
Hanoi(n-1, A, C, B);
cout<<"Pindahkan piringan dari "<<A<<" ke "<<C;
Hanoi(n-1, B, A, C);
}
}
MEMINDAHKAN TIGA PIRINGAN
Hanoi (3,1,2,3)
Hanoi (2,1,3,2)
1-3
Hanoi (2,2,1,3)
Hanoi (1,1,2,3) 1-2 Hanoi (1,3,1,2) Hanoi (2,2,3,1) 2-3 Hanoi (2,1,2,3)
1-3 3-2 2-1 1-3
(1-3) (1-2) (3-2) (1-3) (2-1) (2-3) (1-3)
void Hanoi (int n, int A, int B, int C) {
if (n>0) {
Hanoi(n-1, A, C, B);
cout<<"Pindahkan piringan dari "<<A<<" ke "<<C<<endl;
Hanoi(n-1, B, A, C);
MEMINDAHKAN TIGA PIRINGAN
ASAL PERANTARA TUJUAN
1 2 3
1
2
3
(1-3) (1-2) (3-2) (1-3) (2-1) (2-3) (1-3)
Jalankan
Program

More Related Content

ALGORITMA MENARA HANOI MENGGUNAKAN FUNGSI REKURSIF

  • 2. PERMASALAHAN ATURAN MAIN Memindahkan semua piringan dari ke tiang lain Hanya boleh memindahkan satu piringan setiap pemindahan Tidak boleh ada piringan yang lebih besar di atas piringan kecil XASAL PERANTARA TUJUAN
  • 3. SOLUSI UNTUK SATU PIRINGAN ASAL PERANTARA TUJUAN A B C • Pindahkan piringan dari A ke C
  • 4. SOLUSI UNTUK DUA PIRINGAN ASAL PERANTARA TUJUAN A B C • Pindahkan piringan dari A ke B menggunakan C 1 2 • Pindahkan piringan dari A ke C • Pindahkan piringan dari B ke C menggunakan A
  • 5. SOLUSI UNTUK TIGA PIRINGAN ASAL PERANTARA TUJUAN A B C • Pindahkan dua piringan dari A ke B menggunakan C 1 2 • Pindahkan piringan dari A ke C • Pindahkan dua piringan dari B ke C menggunakan A 3
  • 6. SOLUSI UNTUK N PIRINGAN ASAL PERANTARA TUJUAN A B C • Pindahkan n-1 piringan dari A ke B menggunakan C 1 2 • Pindahkan piringan dari A ke C • Pindahkan n-1 piringan dari B ke C menggunakan A 3
  • 7. FUNGSI HANOI ASAL PERANTARA TUJUAN A B C 1 2 3 void Hanoi (int n, int A, int B, int C) { if (n>0) { Hanoi(n-1, A, C, B); cout<<"Pindahkan piringan dari "<<A<<" ke "<<C; Hanoi(n-1, B, A, C); } }
  • 8. PROGRAM • Pindahkan n-1 piringan dari A ke B menggunakan C • Pindahkan piringan dari A ke C • Pindahkan n-1 piringan dari B ke C menggunakan A void Hanoi (int n, int A, int B, int C) { if (n>0) { Hanoi(n-1, A, C, B); cout<<"Pindahkan piringan dari "<<A<<" ke "<<C; Hanoi(n-1, B, A, C); } }
  • 9. MEMINDAHKAN TIGA PIRINGAN Hanoi (3,1,2,3) Hanoi (2,1,3,2) 1-3 Hanoi (2,2,1,3) Hanoi (1,1,2,3) 1-2 Hanoi (1,3,1,2) Hanoi (2,2,3,1) 2-3 Hanoi (2,1,2,3) 1-3 3-2 2-1 1-3 (1-3) (1-2) (3-2) (1-3) (2-1) (2-3) (1-3) void Hanoi (int n, int A, int B, int C) { if (n>0) { Hanoi(n-1, A, C, B); cout<<"Pindahkan piringan dari "<<A<<" ke "<<C<<endl; Hanoi(n-1, B, A, C);
  • 10. MEMINDAHKAN TIGA PIRINGAN ASAL PERANTARA TUJUAN 1 2 3 1 2 3 (1-3) (1-2) (3-2) (1-3) (2-1) (2-3) (1-3) Jalankan Program