Shift 2D Grid in C++

C++Server Side ProgrammingProgramming

Suppose we have one 2D grid of size m x n. We have another variable k. We have to shift the grid k times. The shift operation will be as follows

  • Element at grid G[i, j] moves to G[i, j + 1]

  • Element at grid G[i, n – 1] moves to G[i + 1, 0]

  • Element at grid G[m - 1, n – 1] moves to G[0, 0]

So if the grid is like −

123
456
789

The output will be −

912
345
678

To solve this, we will follow these steps −

  • The shift operation will take the matrix as input

  • n = number of rows, m := number of columns, x := bottom right element

  • for i := n – 1, down to 0

    • for j := m – 1 down to 0

      • if j = 0 and i > 0, then G[i, j] := G[i – 1, m - 1]

      • else if j > 0, then G[i, j] := G[i, j – 1]

  • G[0, 0] := x

  • Call the shift operation by the following rule −

  • while k is not 0

    • shift the grid G

    • decrease k by 1

  • return grid G

Example (C++)

Let us see the following implementation to get a better understanding −

 Live Demo

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<int> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] <<", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   void shift(vector<vector<int>>& grid){
      int n = grid.size();
      int m = grid[0].size();
      int x = grid[n-1][m-1];
      for(int i = n-1; i>=0; i--){
         for(int j = m-1;j>=0;j--){
            if(j == 0 && i>0){
               grid[i][j] = grid[i-1][m-1];
            }
            else if(j>0){
               grid[i][j] = grid[i][j-1];
            }
         }
      }
      grid[0][0] = x;
   }
   vector<vector<int>> shiftGrid(vector<vector<int>>& g, int k) {
      while(k--){
         shift(g);
      }
      return g;
   }
};
main(){
   Solution ob;
   vector<vector<int>> mat = {{1,2,3},{4,5,6},{7,8,9}};
   print_vector(ob.shiftGrid(mat, 1));
}

Input

{{1,2,3},{4,5,6},{7,8,9}}
1

Output

[[9, 1, 2, ],[3, 4, 5, ],[6, 7, 8, ],]
raja
Published on 28-Jan-2020 14:20:17
Advertisements