Shift 2D Grid in C++



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 −

1 2 3
4 5 6
7 8 9

The output will be −

9 1 2
3 4 5
6 7 8

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, ],]
Updated on: 2020-04-27T09:14:50+05:30

628 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements