मैजिक स्क्वायर एक वर्ग मैट्रिक्स है, जिसका क्रम विषम है और जहां प्रत्येक पंक्ति या प्रत्येक स्तंभ या प्रत्येक विकर्ण के लिए तत्वों का योग समान है।
इस सूत्र का उपयोग करके प्रत्येक पंक्ति या प्रत्येक स्तंभ या प्रत्येक विकर्ण का योग ज्ञात किया जा सकता है। n(n2+ 1)/2
मैजिक स्क्वायर बनाने के नियम यहां दिए गए हैं -
- हम मैट्रिक्स की पहली पंक्ति के मध्य कॉलम से शुरू करेंगे, और अगला नंबर रखने के लिए हमेशा ऊपरी बाएं कोने में जाएंगे
- यदि पंक्ति अधिक हो जाती है, या पंक्ति मैट्रिक्स में नहीं है, तो कॉलम को बाएं कॉलम के रूप में बदलें और संख्या को मैट्रिक्स की अंतिम पंक्ति पर रखें, और फिर से ऊपरी बाएं कोने पर जाएं।
- यदि कॉलम अधिक हो गया है, या कॉलम मैट्रिक्स में नहीं है, तो पंक्ति को शीर्ष पंक्ति के रूप में बदलें और उस मैट्रिक्स के अंतिम कॉलम पर नंबर रखें, फिर ऊपरी बाएं कोने पर जाएं।
- जब ऊपरी बायां कोना खाली न हो या पंक्ति और स्तंभ दोनों सीमा से अधिक हो, तो संख्या को अंतिम संख्या के नीचे रखें।
इनपुट और आउटपुट
Input: The order of the matrix 5 Output: 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 fill all elements in mat to 0 range := r * c i := 0 j := c/2 mat[i, j] := count //center of top row while count < range, do increase count by 1 if both i and j crosses the matrix range, then increase i by 1 else if only i crosses the matrix range, then i := c – 1 decrease j by 1 else if only j crosses the matrix range, then j := c – 1 decrease i by 1 else if i and j are in the matrix and element in (i, j) ≠ 0, then increase i by 1 else decrease i and j by 1 mat[i, j] := count done display the matrix mat End
उदाहरण
#include<iostream> #include<iomanip> 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; //initialize all elements with 0 range = r*c; i = 0; j = c/2; array[i][j] = count; while(count < range) { count++; if((i-1) < 0 && (j-1) < 0) //when both row and column crosses the range i++; else if((i-1) <0) { //when only row crosses range, set i to last row, and decrease j i = r-1; j--; }else if((j-1) < 0) { //when only col crosses range, set j to last column, and decrease i j = c-1; i--; }else if(array[i-1][j-1] != 0) //when diagonal element is not empty, go to next row i++; else{ i--; j--; } array[i][j] = count; } // Printing the square for(i = 0; i<r; i++) { for(j = 0; j<c; j++) cout <<setw(3) << array[i][j]; cout << endl; } } main() { int** matrix; int row, col; cout << "Enter the order(odd) of square matrix :"; cin >> row; col = row; matrix = new int*[row]; for(int i = 0; i<row; i++) { matrix[i] = new int[col]; } createSquare(matrix, row, col); }
आउटपुट
Enter the order(odd) of square matrix :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