Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ แก้ปัญหา Tower of Hanoi ด้วยค่า Binary


โปรแกรม 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