मान लीजिए हमारे पास एक मैट्रिक्स है और हमें मैट्रिक्स के तत्वों को स्पाइरल (spiral) तरीके से प्रिंट करना है। पहले पहली पंक्ति से शुरू करके, पूरी सामग्री प्रिंट करें और फिर अंतिम कॉलम को प्रिंट करने के लिए फॉलो करें, फिर अंतिम पंक्ति, और इसी तरह, इस प्रकार यह तत्वों को स्पाइरल फैशन में प्रिंट करता है। यदि मैट्रिक्स इस तरह है:
| 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 |
तो आउटपुट इस तरह होगा: [1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16]
इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- currRow := 0 और currCol := 0
- जब तक currRow और currCol मैट्रिक्स रेंज में हैं:
- i को currCol से n-1 तक की रेंज में:
- mat[currRow, i] प्रदर्शित करें
- currRow को 1 बढ़ाएं
- i को currRow से m-1 तक की रेंज में:
- mat[i, n-1] प्रदर्शित करें
- n को 1 घटाएं
- यदि currRow < m, तो:
- i := n-1 से currCol तक डाउन करें:
- mat[m-1, i] प्रदर्शित करें
- m को 1 घटाएं
- i := n-1 से currCol तक डाउन करें:
- यदि currCol < n, तो:
- i := m-1 से currRow तक डाउन करें:
- mat[i, currCol] प्रदर्शित करें
- currCol को 1 बढ़ाएं
- i := m-1 से currRow तक डाउन करें:
- i को currCol से n-1 तक की रेंज में:
उदाहरण (C++)
#include <iostream>
#define ROW 3
#define COL 6
using namespace std;
int array[ROW][COL] = {{1, 2, 3, 4, 5, 6},
{7, 8, 9, 10, 11, 12},
{13, 14, 15, 16, 17, 18}};
void dispSpiral(int m, int n){
int i, currRow = 0, currCol = 0;
while (currRow < ROW && currCol < COL){
for (i = currCol; i < n; i++){
cout << array[currRow][i] << " ";
}
currRow++;
for (i = currRow; i < m; ++i){
cout << array[i][n-1] << " ";
}
n--;
if (currRow < m){
for (i = n-1; i >= currCol; --i){
cout << array[m-1][i] << " ";
}
m--;
}
if (currCol < n){
for (i = m-1; i >= currRow; --i){
cout << array[i][currCol] << " ";
}
currCol++;
}
}
}
int main(){
dispSpiral(ROW, COL);
}
इनपुट
[[1,2,3,4,5,6] [7,8,9,10,11,12] [13,14,15,16,17,18]]
आउटपुट
1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16