C में 3×3 मैजिक स्क्वायर पहेली को कैसे हल करें Python

⚡ स्मार्ट सारांश

मैजिक स्क्वायर पहेलियों में n गुणा n ग्रिड के अंदर लगातार संख्याओं को इस तरह व्यवस्थित किया जाता है कि प्रत्येक पंक्ति, स्तंभ और मुख्य विकर्ण का योगफल एक समान हो, जिसे मैजिक कॉन्स्टेंट कहा जाता है, जो उन्हें मनोरंजक गणित और एल्गोरिथम सोच का एक उत्कृष्ट अभ्यास बनाता है।

  • 🔢 मैजिक कांस्टेंट का सूत्र: n क्रम के किसी भी सामान्य जादुई वर्ग के लिए, जादुई योग n(n²+1)/2 के बराबर होता है, जो 3 क्रम के लिए 15 और 7 क्रम के लिए 175 उत्पन्न करता है।
  • 🧩 सियामी विधि: विषम क्रम वाले मैजिक स्क्वेयर को उत्पन्न करने के लिए, शीर्ष पंक्ति के मध्य में 1 रखा जाता है, फिर रैप-अराउंड और टकराव के नियमों को ध्यान में रखते हुए इसे ऊपर-दाएं ले जाया जाता है।
  • 📐 वर्गाकार प्रकार: मैजिक स्क्वेयर को नॉर्मल, सेमी-मैजिक, सिंपल और मोस्ट परफेक्ट के रूप में वर्गीकृत किया जाता है, जिसमें प्रत्येक प्रकार को इस आधार पर परिभाषित किया जाता है कि किन योगों को मैजिक कॉन्स्टेंट से मेल खाना चाहिए।
  • कार्यशील कार्यान्वयन: समान C++ और Python प्रोग्राम O(n²) सहायक स्थान का उपयोग करके O(n²) समय में किसी भी विषम-क्रम वर्ग का निर्माण करते हैं।
  • 🧪 चरण-दर-चरण डेमो: एक विस्तृत 3x3 वॉकथ्रू दिखाता है कि नौ में से प्रत्येक प्लेसमेंट पंक्ति, स्तंभ और विकर्ण नियम को कैसे संतुष्ट करता है।

मैजिक स्क्वायर क्या है?

मैजिक स्क्वायर एक वर्गाकार मैट्रिक्स होता है जिसमें संख्याओं की एक विशेष व्यवस्था होती है। मान इस प्रकार रखे जाते हैं कि प्रत्येक पंक्ति, प्रत्येक स्तंभ और दोनों मुख्य विकर्णों का योग समान रहे। मैजिक स्क्वायर सरल तर्क पहेलियाँ हैं जिनका उपयोग मनोरंजक गणित में किया जाता है।

जादुई वर्ग उदाहरण:

मैजिक स्क्वायर

ऊपर दिया गया आरेख 3 कोटि के एक मैजिक स्क्वायर को दर्शाता है। इसके प्रत्येक विकर्ण, पंक्ति और स्तंभ का योग 15 के बराबर है। अगला भाग बताता है कि यह स्थिर योग कैसे प्राप्त होता है।

मैजिक स्क्वेयर कैसे काम करते हैं

n कोटि का एक मैजिक स्क्वायर एक n गुणा n मैट्रिक्स होता है जिसमें n² धनात्मक पूर्णांक होते हैं। पंक्तियों या स्तंभों की संख्या को मैट्रिक्स की कोटि कहा जाता है।

आम तौर पर मैजिक स्क्वायर पहेलियों का क्रम विषम होता है और इनमें 1 से n² तक की पूर्णांक संख्याओं का उपयोग होता है। क्योंकि प्रत्येक पंक्ति, स्तंभ और विकर्ण का योग एक समान होना चाहिए, इसलिए उस मान को मैजिक सम या मैजिक कांस्टेंट कहा जाता है। यह कांस्टेंट केवल n पर निर्भर करता है। n क्रम के मैजिक सम का सूत्र इस प्रकार है:

मैजिक स्क्वायर काम करता है

3 कोटि के एक जादुई वर्ग पर विचार करें। तब जादुई योग होगा:

मैजिक स्क्वायर काम करता है

मैजिक स्क्वायर काम करता है

यह सूत्र अंकगणित की व्याख्या करता है, लेकिन इस पहेली का एक लंबा सांस्कृतिक इतिहास है जो इसे इसका यादगार नाम देता है।

इन्हें जादू क्यों कहा जाता है?

प्राचीन गणितज्ञ संख्याओं के रोचक संयोजनों से मोहित थे, और जादुई वर्ग उनमें से एक था। इसका सबसे पहला प्रमाण लगभग 190 ईसा पूर्व चीन से मिलता है।

अध्ययनों से प्राचीन जापान, भारत और अरब में जादुई वर्ग पहेलियों के प्रमाण मिलते हैं। लोककथाओं में इन संरचनाओं को जादुई दुनिया से जोड़ा गया और यह नाम प्रचलित हो गया। लोककथाओं से परे, गणितज्ञों ने औपचारिक श्रेणियां भी परिभाषित की हैं जो एक वर्ग को दूसरे से अलग करती हैं।

मैजिक स्क्वायर के प्रकार

गणित में मैजिक स्क्वेयर के कई प्रकार होते हैं:

  • सामान्य जादुई वर्ग: इसमें पहले n² प्राकृतिक संख्याएँ शामिल हैं।
  • अर्द्ध-जादुई वर्ग: केवल पंक्तियों और स्तंभों का योग ही उस जादुई स्थिरांक के बराबर होता है।
  • सरल जादू वर्ग: पंक्तियों, स्तंभों और दोनों मुख्य विकर्णों का योग जादुई स्थिरांक के बराबर होता है।
  • सबसे उत्तम जादुई वर्ग: एक सामान्य मैजिक स्क्वायर जिसमें दो अतिरिक्त गुण हैं। मैट्रिक्स के प्रत्येक 2 गुणा 2 उप-वर्ग का योग 2(n²+1) होता है, और n/2 सेल की दूरी पर स्थित संख्याओं के किसी भी जोड़े का योग n²+1 होता है।

अतिरिक्त गुणों के आधार पर और भी श्रेणियाँ मौजूद हैं। इस ट्यूटोरियल में जब भी "मैजिक स्क्वायर" शब्द का प्रयोग बिना किसी विशेषण के किया जाता है, तो इसका तात्पर्य विषम क्रम वाले, सामान्य, सरल मैजिक स्क्वायर से होता है।

मैजिक स्क्वायर उत्पन्न करने का एल्गोरिदम

विषम क्रम के मैजिक स्क्वायर को उत्पन्न करने के लिए क्लासिक एल्गोरिदम, जिसे सियामी विधि कहा जाता है, इस प्रकार है:

  • पहली संख्या (1) को (n/2, n-1) स्थिति पर संग्रहित किया जाता है, जहाँ पहला निर्देशांक पंक्ति सूचकांक है और दूसरा स्तंभ सूचकांक है। बाद के चरणों के लिए, इस स्थिति को (x, y) कहें।
  • अगली संख्या (x-1, y+1) पर रखी जाती है। यदि वह स्थिति अमान्य है, तो निम्नलिखित नियम लागू करें:
    1. यदि पंक्ति सूचकांक -1 है, तो इसे n-1 में बदल दें। यदि स्तंभ सूचकांक n है, तो इसे 0 में बदल दें।
    2. यदि परिकलित स्थिति में पहले से ही कोई संख्या मौजूद है, तो पंक्ति को 1 से बढ़ाएँ और स्तंभ को 2 से घटाएँ।
    3. यदि पंक्ति -1 है और स्तंभ n है, तो नई स्थिति (0, n-2) है।

नोट: यह एल्गोरिदम केवल विषम क्रम के वैध मैजिक स्क्वायर उत्पन्न करता है। परिणाम एक सामान्य मैजिक स्क्वायर होता है जिसमें पहले n² प्राकृतिक संख्याएँ शामिल होती हैं। एक ही n के लिए एक से अधिक वैध हल हो सकते हैं।

तीसरे क्रम के एक छोटे से उदाहरण के माध्यम से नियम और भी स्पष्ट हो जाते हैं, जिसमें 1 से 9 तक की संख्याओं का उपयोग किया जाता है।

यह 3x3 वर्ग पर कैसे काम करता है

आवेदन करना कलन विधि ऊपर दिए गए चरणों का पालन करें:

चरण 1) पहली संख्या (1) को (3/2, 3-1) या (1, 2) पर रखा जाता है। बाद के चरणों के लिए, x = 1 और y = 2 सेट करें।

मैजिक स्क्वायर उत्पन्न करने के लिए एल्गोरिदम

चरण 2) शेष संख्याओं की स्थिति की गणना निम्नानुसार की जाती है।

संख्या 2 की स्थिति:

अगली संख्या (x-1, y+1) या (0, 3) पर जानी चाहिए, जो कि मान्य स्थिति नहीं है। नियम (a) के अनुसार, स्तंभ 0 पर समाप्त होता है, जिससे (0, 0) प्राप्त होता है। x = 0 और y = 0 मान लें।

मैजिक स्क्वायर उत्पन्न करने के लिए एल्गोरिदम

संख्या 3 की स्थिति:

संख्या 3 (x-1, y+1) या (-1, 1) पर होनी चाहिए, जो कि मान्य स्थिति नहीं है। नियम (a) के अनुसार, पंक्ति n-1 (जो कि 2 है) पर घूमती है। इसलिए संख्या 3 (2, 1) पर जाती है। x = 2 और y = 1 मान लें।

मैजिक स्क्वायर उत्पन्न करने के लिए एल्गोरिदम

संख्या 4 की स्थिति:

संख्या 4 (x-1, y+1) या (1, 2) पर होनी चाहिए, जो मान्य है लेकिन इसमें पहले से ही 1 शामिल है। नियम (b) के अनुसार, नई स्थिति (1+1, 2-2) या (2, 0) है। x = 2, y = 0 निर्धारित करें।

मैजिक स्क्वायर उत्पन्न करने के लिए एल्गोरिदम

संख्या 5 की स्थिति:

संख्या 5 (x-1, y+1) या (1, 1) पर होनी चाहिए, जो एक वैध रिक्त स्थान है। x = 1, y = 1 सेट करें।

मैजिक स्क्वायर उत्पन्न करने के लिए एल्गोरिदम

संख्या 6 की स्थिति:

संख्या 6 (x-1, y+1) या (0, 2) पर होनी चाहिए, जो एक वैध रिक्त स्थान है। x = 0, y = 2 सेट करें।

मैजिक स्क्वायर उत्पन्न करने के लिए एल्गोरिदम

संख्या 7 की स्थिति:

संख्या 7 (x-1, y+1) या (-1, 3) पर होनी चाहिए, जो मान्य नहीं है। नियम (c) के अनुसार, नई स्थिति (0, n-2) या (0, 1) है। x = 0, y = 1 निर्धारित करें।

मैजिक स्क्वायर उत्पन्न करने के लिए एल्गोरिदम

संख्या 8 की स्थिति:

संख्या 8 (x-1, y+1) या (-1, 2) पर होनी चाहिए, जो मान्य नहीं है। नियम (a) के अनुसार, पंक्ति 2 पर वापस आ जाती है, जिससे (2, 2) प्राप्त होता है। x = 2, y = 2 मान लें।

मैजिक स्क्वायर उत्पन्न करने के लिए एल्गोरिदम

संख्या 9 की स्थिति:

संख्या 9 (x-1, y+1) या (1, 3) पर होनी चाहिए, जो मान्य नहीं है। नियम (a) के अनुसार, स्तंभ 0 पर समाप्त होता है, जिससे (1, 0) प्राप्त होता है।

मैजिक स्क्वायर उत्पन्न करने के लिए एल्गोरिदम

जब सभी सेल भर जाते हैं, तो वही तर्क सीधे स्यूडो-कोड में परिवर्तित हो जाता है।

मैजिक स्क्वायर के लिए छद्म-कोड

Begin
    Declare an array of size n*n
    Initialize the array to 0
    Set row = n/2
    Set column = n-1
    For all number i: from 1 to n*n
        If the row = -1 and column = n
            row = 0
            column = n-2
        Else
            If row = -1
                row = n-1
            If column = n
                column = 0
        If the position already contains a number
            decrement column by 2
            increment row by 1
            continue until the position is not 0
        Else
            put the number i into the calculated position
            increment i
        Increment column value
        Decrement row value
End

स्यूडो-कोड सीधे कंपाइल और इंटरप्रिटेड भाषाओं पर मैप होता है, जिसे आगे दिखाया गया है। C++ और Python.

C++ Code मैजिक स्क्वायर के लिए

इनपुट:

/*
A C/C++ program for generating odd order magic squares
*/
#include <bits/stdc++.h>
using namespace std;

void GenerateMagicSquare(int n)
{
    int magic[n][n];
    //initializing the array
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            magic[i][j] = 0;
    //setting row and column value
    int i = n / 2;
    int j = n - 1;
    for (int k = 1; k <= n * n;)
    {
        //checking condition (c)
        if (i == -1 && j == n)
        {
            j = n - 2;
            i = 0;
        }
        else
        {
            //checking condition (a)
            if (j == n)
                j = 0;
            if (i < 0)
                i = n - 1;
        }
        //checking condition (b)
        if (magic[i][j])
        {
            j -= 2;
            i++;
            continue;
        }
        else
        {
            //placing the number into the array
            magic[i][j] = k;
            k++;
        }
        //for the next number setting (i-1, j+1)
        j++;
        i--;
    }
    //printing the matrix
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << magic[i][j] << "  ";
        cout << endl;
    }
}
int main()
{
    //This code works for only odd numbers
    int n = 7;
    cout<<"The magic sum is " << n*(n*n+1)/2 <<endl;
    GenerateMagicSquare(n);
    return 0;
}

उदाहरण का आउटपुट:

The magic sum is 175

20  12  4  45  37  29  28
11  3  44  36  35  27  19
2  43  42  34  26  18  10
49  41  33  25  17  9  1
40  32  24  16  8  7  48
31  23  15  14  6  47  39
22  21  13  5  46  38  30

RSI Python नीचे दिए गए संस्करण में पंक्ति और स्तंभ के समान नियम लागू होते हैं।

Python Code मैजिक स्क्वायर के लिए

def GenerateMagicSquare(n):
    #initializing the array
    magic = [[0 for x in range(n)]
                for y in range(n)]
    #setting row and column value
    i = n // 2
    j = n - 1
    k = 1
    while k <= (n * n):
        #checking condition (c)
        if i == -1 and j == n:
            j = n - 2
            i = 0
        else:
            #checking condition (a)
            if j == n:
                j = 0
            if i < 0:
                i = n - 1
        #checking conditon (b)
        if magic[i][j]:
            j = j - 2
            i = i + 1
            continue
        else:
            #placing the number into the array
            magic[i][j] = k
            k = k + 1
        #for the next number setting (i-1, j+1)
        j = j + 1
        i = i - 1
    #printing the matrix
    for i in range(0, n):
        for j in range(0, n):
            print('%2d ' % (magic[i][j]),end='')
            if j == n - 1:
                print()
#This code works for only odd numbers
n = 7
print("The magic sum is ",n * (n * n + 1) // 2, "\n")
GenerateMagicSquare(n)

उदाहरण का आउटपुट:

The magic sum is  175

20 12  4 45 37 29 28
11  3 44 36 35 27 19
 2 43 42 34 26 18 10
49 41 33 25 17  9  1
40 32 24 16  8  7 48
31 23 15 14  6 47 39
22 21 13  5 46 38 30

दोनों कार्यान्वयन एक समान रूप से व्यवहार करते हैं, जिससे उनकी लागत की तुलना करना आसान हो जाता है।

जटिलता विश्लेषण

  • अंतरिक्ष जटिलता: मैजिक स्क्वायर को n x n सरणी में संग्रहीत किया जाता है, इसलिए स्थान जटिलता O(n²) है।
  • समय जटिलता: यह जनरेटर दो नेस्टेड लूप का उपयोग करता है। बाहरी लूप n बार चलता है, और आंतरिक लूप भी n बार चलता है, इसलिए कुल समय जटिलता O(n²) है।

अक्सर पूछे जाने वाले प्रश्न

एक सामान्य 3x3 मैजिक स्क्वायर के लिए जिसमें 1 से 9 तक की संख्याएँ होती हैं, मैजिक स्थिरांक 15 होता है। प्रत्येक पंक्ति, स्तंभ और मुख्य विकर्ण का योग 15 होना चाहिए, जो सूत्र n(n²+1)/2 से सिद्ध होता है, जहाँ n का मान 3 है।

नहीं। इस ट्यूटोरियल में दिखाई गई सियामी विधि केवल विषम क्रम के मैजिक स्क्वेयर के लिए परिभाषित है। सम क्रम के लिए अलग-अलग एल्गोरिदम की आवश्यकता होती है, जैसे कि द्विसम (n 4 से विभाज्य) और एकलसम (n 4k+2 के बराबर) संरचनाएं, जो अलग-अलग नियमों का उपयोग करती हैं।

यह जनरेटर n x n मैट्रिक्स को भरता है, इसलिए समय और स्थान दोनों की जटिलता O(n²) है। प्रत्येक सेल को एक निश्चित संख्या में बार देखा जाता है, और इसमें ठीक n² पूर्णांकों का भंडारण होता है। यह एल्गोरिदम को सामान्य आकार के मनोरंजन उपकरणों के लिए कुशल बनाता है।

जब क्लोज्ड-फॉर्म विधियाँ लागू नहीं होती हैं, तो जेनेटिक एल्गोरिदम, सिमुलेटेड एनीलिंग और कंस्ट्रेंट-सैटिस्फैक्शन सॉल्वर जैसी एआई तकनीकें वैध मैजिक स्क्वायर की खोज कर सकती हैं, जिनमें सम क्रम, आंशिक वर्ग और अतिरिक्त बाधाओं वाले वेरिएंट जैसे कि केवल अभाज्य या ज्यामितीय मैजिक स्क्वायर शामिल हैं।

मैजिक स्क्वेयर्स, कॉम्बिनेटरियल ऑप्टिमाइजेशन, रीइन्फोर्समेंट-लर्निंग एजेंट्स और न्यूरल सर्च के लिए बेंचमार्क समस्याएं हैं। शोधकर्ता इनका उपयोग संरचित असतत स्थानों पर ह्यूरिस्टिक्स, मेटाहेरिस्टिक्स और एआई प्लानर्स का परीक्षण करने के लिए करते हैं, क्योंकि समाधानों को सत्यापित करना आसान है, लेकिन उनकी गणना करना अभी भी एक अनसुलझी गणितीय समस्या बनी हुई है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: