raghuvanshraj

54.cpp

Jul 26th, 2021
648
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  *    author:   vulkan
  3.  *    created:  01.06.2020 04:55:50 PM
  4. **/
  5. #include <bits/stdc++.h>
  6.  
  7. using namespace std;
  8.  
  9. vector<int> spiralOrder(vector<vector<int>> &matrix) {
  10.     int n = matrix.size();
  11.     int m = (n > 0) ? matrix[0].size() : -1;
  12.     if (m == -1 or m == 0) {
  13.         return {};
  14.     }
  15.  
  16.     vector<int> ans(n * m);
  17.     int end_i = n / 2, end_j = m / 2;
  18.     int u = 0, d = n - 1, l = 0, r = m - 1;
  19.     int k = 0;
  20.     while (k < n * m) {
  21.         for (int i = l; i <= r; ++i) {
  22.             ans[k++] = matrix[u][i];
  23.         }
  24.         u++;
  25.  
  26.         if (k == n * m) {
  27.             break;
  28.         }
  29.  
  30.         for (int i = u; i <= d; ++i) {
  31.             ans[k++] = matrix[i][r];
  32.         }
  33.         r--;
  34.  
  35.         if (k == n * m) {
  36.             break;
  37.         }
  38.  
  39.         for (int i = r; i >= l; --i) {
  40.             ans[k++] = matrix[d][i];
  41.         }
  42.         d--;
  43.  
  44.         if (k == n * m) {
  45.             break;
  46.         }
  47.  
  48.         for (int i = d; i >= u; --i) {
  49.             ans[k++] = matrix[i][l];
  50.         }
  51.         l++;
  52.     }
  53.  
  54.     return ans;
  55. }
  56.  
  57. int main(int argc, char const *argv[]) {
  58.     int n, m;
  59.     cin >> n >> m;
  60.     vector<vector<int>> matrix(n, vector<int>(m));
  61.     for (int i = 0; i <= n - 1; ++i) {
  62.         for (int j = 0; j <= m - 1; ++j) {
  63.             cin >> matrix[i][j];
  64.         }
  65.     }
  66.  
  67.     vector<int> ans = spiralOrder(matrix);
  68.     for (int x : ans) {
  69.         cout << x << ' ';
  70.     }
  71.  
  72.     return 0;
  73. }
RAW Paste Data