## 11 May 2010

### Print Matrix in a circular path (Interview question)

Hi friends,

This is one of the interview questions I faced recently and thought I would share it.

Question:
Given a matrix print all its value in a circular fashion like shown in the image below.

Solution:
To attack this problem we definitely want to have a left-right, top-bottom, right-left and bottom-top spans. For attaining this, we obviously want to have 4 loops. The C++ code is given below.

```//============================================================================
// Author      : c++
// Description : output given matrix elements circularly
//============================================================================

#include <iostream>
using namespace std;

#define HEIGHT 6
#define WIDTH  3

int main()
{
//int array[HEIGHT][WIDTH] = {{1,2,3,4,5},{16,17,18,19,6},{15,24,25,20,7},{14,23,22,21,8},{13,12,11,10,9}};
//int array[HEIGHT][WIDTH] = {{1,2,3,4,5,6},{14,15,16,17,18,7},{13,12,11,10,9,8}};
int array[HEIGHT][WIDTH] = {{1,2,3},{14,15,4},{13,16,5},{12,17,6},{11,18,7},{10,9,8}};
int maxh = HEIGHT-1, maxw = WIDTH-1;
int minh = 0, minw = 0;
while(1)
{
if(minh > maxh || minw > maxw)
break;

//top-left to top-right
for(int i=minh,j=minw;j<=maxw;j++)
cout << array[i][j] << endl;
minh++;

if(minh > maxh || minw > maxw)
break;

//top-right to bottom-right
for(int i=minh,j=maxw;i<=maxh;i++)
cout << array[i][j] << endl;
maxw--;

if(minh > maxh || minw > maxw)
break;

//bottom-right to bottom-left
for(int i=maxh,j=maxw;j>=minw;j--)
cout << array[i][j] << endl;
maxh--;

if(minh > maxh || minw > maxw)
break;

//bottom-left to top-left
for(int i=maxh,j=minw;i>=minh;i--)
cout << array[i][j] << endl;
minw++;
}
return 0;
}
//1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
```

Cheers!

nagarajan said...

I have seen this question in many places and have seen quite a lot of complicated solutions

But your way of approach rocks :-)

BragBoy said...

getting heat said...

simple & sweet solution liked it :)

BragBoy said...

@getting head, thanks for the visit !