Print matrix in spiral form

Question : The question is pretty much clear that we have to print the matrix in spiral form. So for this we will take four pointers pointing to top, down, left & right of the given matrix. Next we will take dir variable which will basically store the direction that is :

 

dir = 0 means from left to right

dir = 1 means from top to down

dir = 2 means from right to left

dir = 3 means from down to top

 

Rest you can easily figure out by below images :
 

 

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

void show(int row, int col, int a[r][c])
{
  int dir = 0, top = 0, down = r-1, left = 0, right = c-1, i, j;
  while(left <= right && top <= down)
  {
    if(dir == 0)
    {
      for(i = top; i <= right; i++) cout << a[top][i] << " ";
      top++;  
    }
    else if(dir == 1)
    {
      for(i = top; i <= down; i++) cout << a[i][right] << " ";
      right--;  
    }
    else if(dir == 2)
    {
      for(i = right; i >= left; i--) cout << a[down][i] << " ";
      down--;  
    }
    else if(dir == 3)
    {
      for(i = down; i >= top; i--) cout << a[i][left] << " ";
      left++;  
      dir = -1;
    }
    dir++;
  }
}

int main()
{
  int a[r][c] = { {1, 2, 3, 4, 5},
                  {6, 7, 8, 9, 10},
                  {11, 12, 13, 14, 15},
                  {16, 17, 18, 19, 20},
                  {21, 22, 23, 24, 25},
                  {26, 27, 28, 29, 30} };
  show(r, c, a);              
  return 0;
}

 

Pic Credits : GeeksforGeeks

Video reference : Tech Dose

No comments:

If you have any doubt or suggestion let me know in comment section.

Powered by Blogger.