मैजिक स्क्वायर एक वर्ग मैट्रिक्स है, जिसका क्रम विषम होता है और जहां प्रत्येक पंक्ति या प्रत्येक कॉलम या प्रत्येक विकर्ण के तत्वों का योग समान होता है।

प्रत्येक पंक्ति या प्रत्येक कॉलम या प्रत्येक विकर्ण का योग इस सूत्र का उपयोग करके पाया जा सकता है: n(n² + 1)/2
मैजिक स्क्वायर बनाने के नियम यहां दिए गए हैं -
- हम मैट्रिक्स की पहली पंक्ति के मध्य कॉलम से शुरू करेंगे, और हमेशा अगली संख्या रखने के लिए ऊपरी बाएं कोने की ओर जाएंगे
- यदि पंक्ति पार हो जाती है, या पंक्ति मैट्रिक्स में नहीं है, तो कॉलम को बाएं कॉलम के रूप में बदलें और संख्या को मैट्रिक्स की अंतिम पंक्ति में रखें, और फिर से ऊपरी बाएं कोने के लिए जाएं।
- यदि कॉलम पार हो जाता है, या कॉलम मैट्रिक्स में नहीं है, तो पंक्ति को शीर्ष पंक्ति के रूप में बदलें और उस मैट्रिक्स के अंतिम कॉलम में संख्या रखें, फिर ऊपरी बाएं कोने पर फिर से जाएं।
- जब ऊपरी बायां कोना खाली नहीं है या दोनों पंक्ति और कॉलम रेंज को पार करते हैं, तो संख्या को अंतिम रखी गई संख्या के नीचे रखें।
इनपुट और आउटपुट
इनपुट: मैट्रिक्स का क्रम 5 आउटपुट: 15 8 1 24 17 16 14 7 5 23 22 20 13 6 4 3 21 19 12 10 9 2 25 18 11
एल्गोरिदम
createSquare(mat, r, c)
इनपुट: मैट्रिक्स।
आउटपुट: पंक्ति और कॉलम।
Begin
count := 1
mat में सभी तत्वों को 0 से भरें
range := r * c
i := 0
j := c/2
mat[i, j] := count //शीर्ष पंक्ति का केंद्र
while count < range, do
increase count by 1
if दोनों i और j मैट्रिक्स रेंज को पार करते हैं, then
increase i by 1
else if केवल i मैट्रिक्स रेंज को पार करता है, then
i := c - 1
decrease j by 1
else if केवल j मैट्रिक्स रेंज को पार करता है, then
j := c - 1
decrease i by 1
else if i और j मैट्रिक्स में हैं और (i, j) में तत्व ≠ 0, then
increase i by 1
else
decrease i और j by 1
mat[i, j] := count
done
मैट्रिक्स mat प्रदर्शित करें
Endउदाहरण (C++)
#include#include using namespace std; void createSquare(int **array, int r, int c) { int i, j, count = 1, range; for(i = 0; i < r; i++) for(j = 0; j < c; j++) array[i][j] = 0; //सभी तत्वों को 0 से आरंभ करें range = r*c; i = 0; j = c/2; array[i][j] = count; while(count < range) { count++; if((i-1) < 0 && (j-1) < 0) //जब दोनों पंक्ति और कॉलम रेंज को पार करते हैं i++; else if((i-1) < 0) { //जब केवल पंक्ति रेंज को पार करती है, i को अंतिम पंक्ति पर सेट करें, और j घटाएं i = r-1; j--; } else if((j-1) < 0) { //जब केवल कॉलम रेंज को पार करता है, j को अंतिम कॉलम पर सेट करें, और i घटाएं j = c-1; i--; } else if(array[i-1][j-1] != 0) //जब विकर्ण तत्व खाली नहीं है, अगली पंक्ति पर जाएं i++; else { i--; j--; } array[i][j] = count; } //वर्ग प्रिंट करना for(i = 0; i < r; i++) { for(j = 0; j < c; j++) cout << setw(3) << array[i][j]; cout << endl; } } int main() { int** matrix; int row, col; cout << "वर्ग मैट्रिक्स का क्रम (विषम) दर्ज करें: "; cin >> row; col = row; matrix = new int*[row]; for(int i = 0; i < row; i++) { matrix[i] = new int[col]; } createSquare(matrix, row, col); }
आउटपुट
वर्ग मैट्रिक्स का क्रम (विषम) दर्ज करें: 5 15 8 1 24 17 16 14 7 5 23 22 20 13 6 4 3 21 19 12 10 9 2 25 18 11