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);