Advertisement
madhukeshk3

Array Traversal In Spiral Order

May 11th, 2021
160
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Author: madhukesh
  2. // Created: 2021-05-11 23:25:18
  3.  
  4. /*Success isn't permanent, failure isn't fatal,
  5. it's the courage to continue that counts.*/
  6.  
  7. #include <bits/stdc++.h>
  8. using namespace std;
  9.  
  10. vector<int> spiralOrder(const vector<vector<int> > &A)
  11. {
  12.     vector<int>ans;
  13.    
  14.     int n=A.size();
  15.     if(n==0)
  16.         return ans;
  17.     int m=A[0].size();
  18.    
  19.     int l=0,r=m-1,u=0,d=n-1;
  20.    
  21.     int dir=0;
  22.    
  23.     while((l<=r)&&(u<=d))
  24.     {
  25.         if(dir==0)
  26.         {
  27.             for(int i=l;i<=r;i++)
  28.                 ans.push_back(A[u][i]);
  29.             u++;
  30.         }
  31.         else if(dir==1)
  32.         {
  33.             for(int i=u;i<=d;i++)
  34.                 ans.push_back(A[i][r]);
  35.             r--;
  36.         }
  37.         else if(dir==2)
  38.         {
  39.             for(int i=r;i>=l;i--)
  40.                 ans.push_back(A[d][i]);
  41.             d--;
  42.         }
  43.         else
  44.         {
  45.             for(int i=d;i>=u;i--)
  46.                 ans.push_back(A[i][l]);
  47.             l++;
  48.         }
  49.         dir=(dir+1)%4;
  50.     }
  51.     return ans;
  52. }
  53.  
  54.  
  55. void solve()
  56. {
  57.     int n,m;
  58.     cin>>n>>m;
  59.  
  60.     vector<vector<int>>arr(n,vector<int>(m,0));
  61.  
  62.     for(int i=0;i<n;i++)
  63.     {
  64.         for(int j=0;j<m;j++)
  65.             cin>>arr[i][j];
  66.     }
  67.  
  68.     vector<int>ans=spiralOrder(arr);
  69.  
  70.     for(int i=0;i<ans.size();i++)
  71.         cout<<ans[i]<<" ";
  72.  
  73.  
  74.     return;
  75. }
  76.  
  77. int main()
  78. {
  79.     int t=1;
  80.     //sfi(t)
  81.  
  82.     while(t--)
  83.         solve();
  84.  
  85.     return 0;
  86. }
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement