हमें एक धनात्मक पूर्णांक n दिया गया है और n x n का एक सर्पिल मैट्रिक्स बनाते हैं, केवल O(1) अतिरिक्त स्थान का उपयोग करके दक्षिणावर्त दिशा में
सर्पिल मैट्रिक्स एक मैट्रिक्स है जो एक सर्पिल की तरह काम करता है जो एक सर्कल की उत्पत्ति से शुरू होगा और दक्षिणावर्त फैशन में घूमता है। तो कार्य 2 → 4 → 6 → 8 → 10 → 12 → 14 → 1 6→ 18 से शुरू होने वाले O(1) स्पेस का उपयोग करके मैट्रिक्स को सर्पिल रूप में प्रिंट करना है।
सर्पिल मैट्रिक्स का उदाहरण नीचे दिया गया है -
उदाहरण
Input: 3 Output: 9 8 7 2 1 6 3 4 1
असीमित स्थान के साथ कोड को हल करना आसान हो जाता है लेकिन यह सबसे अच्छा प्रोग्राम के रूप में कुशल नहीं है या कोड वह है जो स्मृति और समय दोनों में कुशल है। तो सर्पिल क्रम को बनाए रखने के लिए चार लूप का उपयोग किया जाता है, प्रत्येक मैट्रिक्स के शीर्ष, दाएं, नीचे और बाएं कोने के लिए, लेकिन अगर हम मैट्रिक्स को दो भागों में विभाजित करते हैं यानी ऊपरी दाएं और निचले बाएं हम सीधे अवधारणा का उपयोग कर सकते हैं
ऊपरी दाएं आधे हिस्से के लिए,
mat[i][j] = (n-2*x)*(n-2*x)-(i-x)-(j-x)
निचले बाएँ आधे भाग के लिए,
mat[i][j] = (n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)
नोट - हम 2 के मैट्रिक्स मल्टीपल को प्रिंट करने के लिए प्रोग्राम लिख रहे हैं
एल्गोरिदम
int spiralmatrix(int n) START STEP 1: DECLARE i, j, a, b, x STEP 2: LOOP FOR i = 0 AND i < n AND i++ LOOP FOR j = 0 AND j < n AND j++ FIND THE MINIMUM IN (i<j ) AND ASSIGN IT TO a FIND THE MINIMUM (n-1-i) < (n-1-j) AND ASSIGN IT TO b THEN ASSIGN THE LEAST VALUE FROM a AND b TO x IF i <= j THEN, PRINT THE VALUE OF 2* ((n-2*x)*(n-2*x) - (i-x) - (j-x)) ELSE PRINT THE VALUE OF 2*((n-2*x-2)*(n-2*x2) + (i-x) + (j-x)) END LOOP PRINT NEWLINE END LOOP STOP
उदाहरण
#include <stdio.h> //For n x n spiral matrix int spiralmatrix(int n){ int i, j, a, b, x; // x stores the layer in which (i, j)th element exist for ( i = 0; i < n; i++){ for ( j = 0; j < n; j++){ // Finds minimum of four inputs a = ((i<j ? i : j)); b = ((n-1-i) < (n-1-j) ? (n-1-i) : (n-1-j)); x = a < b ? a : b; // For upper right half if (i <= j) printf("%d\t ", 2 * ((n-2*x)*(n-2*x) - (i-x) - (j-x))); // for lower left half else printf("%d\t ", 2*((n-2*x-2)*(n-2*x-2) + (i-x) + (j-x))); } printf("\n"); } } int main(int argc, char const *argv[]){ int n = 3; spiralmatrix(n); return 0; }
आउटपुट
यदि हम उपरोक्त प्रोग्राम चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा -
18 16 14 4 2 12 6 8 10