इस समस्या में, हम एक 2d मैट्रिक्स और एक बिंदु P(c,r) हैं। हमारा काम मैट्रिक्स के सभी तत्वों को एक सर्पिल रूप (एंटी-क्लॉकवाइज) में प्रिंट करना है जो किसी दिए गए बिंदु P से शुरू होता है।
हमारी समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input: matrix[][] = {{3, 5, 7} } Output:
इस समस्या को हल करने के लिए, हम मुद्रण तत्वों के लिए 4 लूप का उपयोग करते हैं। प्रत्येक लूप अपनी दिशा के तत्वों को प्रिंट करता है। हम बिंदु p से अपनी छपाई शुरू करेंगे और सर्पिल रूप को प्रिंट करते रहेंगे।
उदाहरण
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम
#include <iostream> using namespace std; const int MAX = 100; void printSpiralMatrix(int mat[][MAX], int r, int c) { int i, a = 0, b = 2; int low_row = (0 > a) ? 0 : a; int low_column = (0 > b) ? 0 : b - 1; int high_row = ((a + 1) >= r) ? r - 1 : a + 1; int high_column = ((b + 1) >= c) ? c - 1 : b + 1; while ((low_row > 0 - r && low_column > 0 - c)) { for (i = low_column + 1; i <= high_column && i < c && low_row >= 0; ++i) cout<<mat[low_row][i]<<" "; low_row -= 1; for (i = low_row + 2; i <= high_row && i < r && high_column < c; ++i) cout<<mat[i][high_column]<<" "; high_column += 1; for (i = high_column - 2; i >= low_column && i >= 0 && high_row < r; --i) cout << mat[high_row][i]<<" "; high_row += 1; for (i = high_row - 2; i > low_row && i >= 0 && low_column >= 0; --i) cout<<mat[i][low_column]<<" "; low_column -= 1; } cout << endl; } int main() { int mat[][MAX] = { { 1, 4, 7 }, { 2, 5, 8 }, { 3, 6, 9 } }; int r = 3, c = 3; cout<<"Sprial traversal of matrix starting from point "<<r<<", "<<c<<" is :\n"; printSpiralMatrix(mat, r, c); }
आउटपुट
बिंदु 3, 3 से शुरू होने वाले मैट्रिक्स का स्प्रिअल ट्रैवर्सल है -
7 8 5 4 9 6 3 2 1