Tutorials  Articles  Notifications  Login  Signup


RK

Rajan Kumar

Founder at HackersFriend Updated Jan. 8, 2020, 12:05 a.m. ⋅ 1343 views

Print a matrix in spiral form


To print a matrix in spiral form we can use four loops.

Let's break down the problem, there 4 moves that are possible during spiral traversal.

  • From left to right
  • From top to bottom
  • Right to left
  • and From bottom to up

We'll need to have loop for each move. We'll loop around the entire matrix, with these moves and keep printing it each mode we visit.

Let's take an example to implement this apprach.

We are given an array, arr and we need to print it in spiral form, begining from the start index of the array.

Input

1 2 3
4 5 6
7 8 9

 

Output

1 2 3 6 9 8 7 4 5

 

Code 

#include <bits/stdc++.h> 
using namespace std; 

void MatrixToSpiral(vector<vector<int>> matrix) 
{ 
	int i, k = 0, l = 0; 
	int m = matrix[0].size(); // last row index
	int n = matrix.size(); // last column index 

	while (k < m && l < n) { 
		/* Print the first row from 
			the remaining rows */
		for (i = l; i < n; ++i) { 
			cout << matrix[k][i] << " "; 
		} 
		k++; 

		/* Print the last column 
		from the remaining columns */
		for (i = k; i < m; ++i) { 
			cout << matrix[i][n - 1] << " "; 
		} 
		n--; 

		/* Print the last row from 
				the remaining rows */
		if (k < m) { 
			for (i = n - 1; i >= l; --i) { 
				cout << matrix[m - 1][i] << " "; 
			} 
			m--; 
		} 

		/* Print the first column from 
				the remaining columns */
		if (l < n) { 
			for (i = m - 1; i >= k; --i) { 
				cout << matrix[i][l] << " "; 
			} 
			l++; 
		} 
	} 
} 


int main() 
{ 
    int rows, cols,temp;
    cout<<"Enter the number of rows:";
    cin>>rows;
    cout<<"Enter the number of cols:";
    cin>>cols;
    cout<<"Enter elements for each row space separated";

    vector<vector<int>> matrix;
    for(int i=0; i<rows; i++)
    {
        vector<int> current_row;
        for(int j = 0; j<cols; j++)
        {
            cin>>temp;
            current_row.push_back(temp);
        }
        matrix.push_back(current_row);
    }
    MatrixToSpiral(matrix);
	return 0; 
} 

Enter the number of rows:3
Enter the number of cols:3
Enter elements for each row space separated1 2 3
4 5 6
7 8 9
1 2 3 6 9 8 7 4 5

Explanation

We have created a vector of vectors to store the matrix, and we are passing this to our function, which first prints from right to left, in the first for loop, then it prints elements from last column till the end then, it traverse in from right to left for the last raw, and then it traverses from bottom to top till the row-1 from which it started. Then this entire cycle continues.

 



HackerFriend Logo

Join the community of 1 Lakh+ Developers

Create a free account and get access to tutorials, jobs, hackathons, developer events and neatly written articles.


Create a free account