2010-05-20 11 views
7

संभव डुप्लिकेट:
How does this work? Weird Towers of Hanoi Solutionहनोई का यह पुनरावृत्ति टॉवर कैसे काम करता है? सी

गूगल पर सर्फिंग करते हैं, मैं हनोई का टॉवर को यह दिलचस्प समाधान जो भी डेटा संरचना के रूप में ढेर का उपयोग नहीं करता पाया।

क्या कोई मुझे संक्षेप में समझा सकता है, वास्तव में यह क्या कर रहा है?

क्या यह समाधान वास्तव में स्वीकार्य है?

कोड

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int n, x; 
    printf("How many disks?\n"); 
    scanf("%d", &n); 
    printf("\n"); 
    for (x=1; x < (1 << n); x++) 
     printf("move from tower %i to tower %i.\n", 
     (x&x-1)%3, ((x|x-1)+1)%3); 
return 0; 
} 

अद्यतन: हार्ड-कोडेड नंबर 3 यहाँ में क्या कर रहा है?

+2

यह मानक 3 छड़ का उपयोग कर रहा है। –

+1

क्या यह चाल के सही अनुक्रम की रिपोर्ट करता है? यदि ऐसा है, तो यह काम करता है, और इसका कोई कारण नहीं है कि इसे स्वीकार्य नहीं होना चाहिए। हालांकि, आपको इसे अपने होमवर्क के समाधान के रूप में पेश करने से पहले इसे समझने की आवश्यकता है, या यदि आपको इसे समझाने के लिए बुलाया जाता है तो आपको परेशानी होगी, क्योंकि आप बहुत अच्छे हो सकते हैं क्योंकि यह सामान्य से बहुत अलग है। –

+0

यह मेरा होमवर्क नहीं है। मैंने बस इस एल्गोरिदम को गलती से पाया और यह पूछने के लिए सोचा कि यह वास्तव में कैसे काम करता है। – TCM

उत्तर

11

स्यूडोकोड में देखने के लिए आसान हो सकता है:

GET NUMBER OF DISKS AS n 
WHILE x BETWEEN 1 INCLUSIVE AND 1 LEFT-SHIFTED BY n BITS 
    SUBTRACT 1 FROM n, DIVIDE BY 3 AND TAKE THE REMAINDER AS A 
    OR x WITH x-1, ADD 1 TO THAT, DIVIDE BY 3 AND TAKE THE REMAINDER AS B 
    PRINT "MOVE FROM TOWER " A " TO TOWER " B 
    ADD 1 TO x 

1 वाम n बिट्स द्वारा स्थानांतरित 4 डिस्क के मामले में एन, 16 की शक्ति के लिए मूल रूप से 2 है।

If you walk through this sequence manually, you should see the progression of movement of the disks. http://library.ust.hk/images/highlights/Tower_of_Hanoi_4.gif

+0

धन्यवाद हार्वे, यह छद्म कोड वास्तव में समझना आसान है :)। बहुत बढ़िया जवाब ! – TCM

+2

उह, "1 और एन के बीच" बिल्कुल "x (1 = x <(1 << n); x ++)" –

+1

@ डेविड: धन्यवाद, तय है। –

6

यह हनोई के टॉवर के बाइनरी समाधानों में से एक है, विकिपीडिया पर इस एल्गोरिदम का एक विस्तृत विवरण है - the "Binary solution" paragraph पढ़ें।

संबंधित मुद्दे