โปรแกรม C++ นี้แสดงคำตอบของปัญหา Tower of Hanoi โดยใช้ค่า Binary
มีหนึ่งหลัก Binary สำหรับแต่ละแผ่น
บิตที่สำคัญที่สุด (MSB) แทนแผ่นใหญ่สุด ค่า 0 หมายถึงแผ่นใหญ่สุดอยู่ที่ไม้กองต้นทาง ในขณะที่ 1 หมายถึงอยู่ที่ไม้กองปลายทาง
สตริงบิตถูกอ่านจากซ้ายไปขวา และแต่ละบิตสามารถใช้กำหนดตำแหน่งของแผ่นที่ตรงกันได้
แผ่นที่ตรงกันจะถูกวางซ้อนบนแผ่นก่อนหน้าบนไม้กองเดียวกัน หากบิตมีค่าเท่ากับบิตก่อนหน้า
ถ้าต่างกัน หมายถึงแผ่นที่ตรงกันอยู่ตำแหน่งหนึ่งซ้ายหรือขวาของแผ่นก่อนหน้า
อัลกอริทึม
เริ่มต้น รับจำนวนแผ่น n เป็นอินพุต ประกาศ n และ a สร้างลูป for a = 1 ถึง (1<<n) – 1 // ที่นี่ (a & a – 1) = bitwise AND ระหว่าง a และ a – 1 (a | a – 1) = bitwise OR ระหว่าง a และ a – 1 ที่นี่ % หมายถึง modulus operator // พิมพ์ผลลัพธ์บ่งชี้ว่าย้ายแผ่นจากไม้กองหมายเลข (a & a – 1) % 3 ไปไม้กองหมายเลข ((a | a – 1) + 1) % 3 จบ
ตัวอย่างโค้ด
#include<iostream> using namespace std; int main() { int n, a; cout<<"\nEnter the no of Disks: "; cin>>n; for (a = 1; a < (1 << n); a++) { cout<<"\nDisk Move from Peg "<<(a&a-1)%3 <<" to Peg "<<((a|a-1)+1)%3; } cout<<"\n"; }
ผลลัพธ์
Enter the no of Disks: 3 Disk Move from Peg 0 to Peg 2 Disk Move from Peg 0 to Peg 1 Disk Move from Peg 2 to Peg 1 Disk Move from Peg 0 to Peg 2 Disk Move from Peg 1 to Peg 0 Disk Move from Peg 1 to Peg 2 Disk Move from Peg 0 to Peg 2