यह C++ प्रोग्राम Tower of Hanoi समस्या का समाधान बाइनरी मानों का उपयोग करके प्रदर्शित करता है। यह एक गणितीय दृष्टिकोण है जहां प्रत्येक डिस्क के लिए एक बाइनरी डिजिट होता है।
कॉन्सेप्ट
- प्रत्येक डिस्क के लिए एक बाइनरी डिजिट होता है
- सबसे सिग्निफिकेंट बिट (MSB) सबसे बड़ी डिस्क को दर्शाता है
- 0 का मान दर्शाता है कि सबसे बड़ी डिस्क प्रारंभिक पेग पर है, 1 का मान दर्शाता है कि यह अंतिम पेग पर है
- बिटस्ट्रिंग को बाएं से दाएं पढ़ा जाता है
- यदि बिट का मान पिछले बिट के समान है, तो संबंधित डिस्क उसी पेग पर पिछली डिस्क के ऊपर स्टैक होती है
- यदि अलग है, तो डिस्क पिछली डिस्क के बाएं या दाएं एक पोजीशन पर होती है
एल्गोरिदम
शुरुआत
1. डिस्क की संख्या n इनपुट लें।
2. n और a डिक्लेयर करें।
3. फॉर लूप a = 1 से (1<<n) - 1 तक:
// (a & a-1) = a और a-1 के साथ बिटवाइज AND
// (a | a-1) = a और a-1 के साथ बिटवाइज OR
// % मॉडुलस ऑपरेटर है
प्रिंट करें कि डिस्क पेग नंबर (a & a-1) % 3 से पेग नंबर ((a | a-1) + 1) % 3 पर मूव हो रही है
समाप्ति
उदाहरण कोड
#include <iostream>
using namespace std;
int main() {
int n, a;
cout << "\nEnter the number 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";
return 0;
}
आउटपुट (n=3 के लिए)
Enter the number 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
व्याख्या: n डिस्क के लिए कुल 2^n - 1 मूव्स आवश्यक होते हैं। यह बाइनरी दृष्टिकोण रिकर्सन के बिना समाधान उत्पन्न करता है। पेग नंबर 0, 1, 2 हैं। यह एल्गोरिदम बाइनरी रिफ्लेक्टेड ग्रे कोड पर आधारित है।