Advertisement
Guest User

Untitled

a guest
Jan 5th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3. #include <sstream>
  4.  
  5. using namespace std;
  6.  
  7. void printVec(vector<vector<int>> &vec)
  8. {
  9.     for (auto &v : vec)
  10.     {
  11.         for (auto &i : v)
  12.             cout << i << " ";
  13.         cout << endl;
  14.     }
  15.  
  16.     cout << endl;
  17. }
  18.  
  19. void rotateVec(vector<vector<int>> &vec, int rotations)
  20. {
  21.     int currM = 0, currN = 0;
  22.     int rowSize = vec.size(), colSize = vec[0].size();
  23.  
  24.     do
  25.     {
  26.         int numLoops = rotations % (rowSize * 2 + colSize * 2 - 4);
  27.  
  28.         // rotate numLoops times for each layer of rectangle
  29.         for(int iter = 0; iter < numLoops; iter++)
  30.         {
  31.             auto first = vec[currM][currN];
  32.  
  33.             // right
  34.             for (int i = 0; i < colSize - 1; i++)
  35.             {
  36.                 vec[currM][currN] = vec[currM][currN + 1];
  37.                 currN++;
  38.             }
  39.  
  40.             // down
  41.             for (int i = 0; i < rowSize - 1; i++)
  42.             {
  43.                 vec[currM][currN] = vec[currM + 1][currN];
  44.                 currM++;
  45.             }
  46.  
  47.             // left
  48.             for (int i = 0; i < colSize - 1; i++)
  49.             {
  50.                 vec[currM][currN] = vec[currM][currN - 1];
  51.                 currN--;
  52.             }
  53.  
  54.             // up
  55.             for (int i = 0; i < rowSize - 1; i++)
  56.             {
  57.                 vec[currM][currN] = vec[currM - 1][currN];
  58.                 currM--;
  59.             }
  60.  
  61.             vec[currM + 1][currN] = first;
  62.         }
  63.  
  64.         // modify parameters and get ready for one level of inner rectangle
  65.         rowSize -= 2;
  66.         colSize -= 2;
  67.         currM++;
  68.         currN++;
  69.     } while (rowSize > 0 && colSize > 0);
  70. }
  71.  
  72. int main()
  73. {
  74.     int rowSize;
  75.     int colSize;
  76.     int rotations;
  77.  
  78.     cin >> rowSize;
  79.     cin >> colSize;
  80.     cin >> rotations;
  81.  
  82.     // generate 2d array
  83.     vector<int> inner(colSize);
  84.     vector<vector<int>> test(rowSize, inner);
  85.  
  86.     // read the input 2d-array
  87.     for (int rowPos = 0; rowPos < rowSize; rowPos++)
  88.         for (int colPos = 0; colPos < colSize; colPos++)
  89.             cin >> test[rowPos][colPos];
  90.  
  91.     // rotate
  92.     rotateVec(test, rotations);
  93.  
  94.     // print the result
  95.     printVec(test);
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement