Monday, November 14, 2016

C++ Program to print a 2-d matrix/vector in spiral order

vector<int> spiralOrder(const vector<vector<int> > &A)

{

    vector<int> result;
    long min_x=0,min_y=0,done=0,count=0,i=0,j=0;
    long n,max_x=A[0].size()-1, m,max_y=A.size()-1;
    long size=(max_x+1)*(max_y+1);
    while(count<size)
        {  
            if(i==min_y && j==min_x)
                {  if(done==1)
                       { min_x++;min_y++;max_x--;max_y--;i=min_y;j=min_x;  }
                    else done=1;
                }
            result.push_back(A[i][j]);
            count++;
            if(i==min_y && j<max_x)        j++;
            else if(i==min_y && j==max_x)  i++;
            else if(i<max_y && j==max_x)   i++;
            else if(i==max_y && j==max_x)  j--;
            else if(i==max_y && j>min_x)   j--;
            else if(i==max_y && j==min_x)  i--;
            else if(i>min_y && j==min_x)   i--;
        }
    return result;
}