Computer >> Máy Tính >  >> Lập trình >> C ++

Shift 2D Grid trong C ++


Giả sử chúng ta có một lưới 2D kích thước m x ​​n. Chúng ta có một biến k khác. Chúng ta phải thay đổi lưới điện k lần. Hoạt động thay đổi sẽ như sau

  • Phần tử ở lưới G [i, j] di chuyển đến G [i, j + 1]

  • Phần tử ở lưới G [i, n - 1] di chuyển đến G [i + 1, 0]

  • Phần tử ở lưới G [m - 1, n - 1] di chuyển đến G [0, 0]

Vì vậy, nếu lưới giống như -

1 2 3
4 5 6
7 8 9

Đầu ra sẽ là -

9 1 2
3 4 5
6 7 8

Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau -

  • Thao tác shift sẽ lấy ma trận làm đầu vào

  • n =số hàng, m:=số cột, x:=phần tử dưới cùng bên phải

  • đối với i:=n - 1, giảm xuống 0

    • cho j:=m - 1 xuống 0

      • nếu j =0 và i> 0, thì G [i, j]:=G [i - 1, m - 1]

      • else nếu j> 0 thì G [i, j]:=G [i, j - 1]

  • G [0, 0]:=x

  • Gọi hoạt động shift theo quy tắc sau -

  • trong khi k không phải là 0

    • chuyển lưới G

    • giảm k đi 1

  • lưới trả về G

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơn -

#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));
}

Đầu vào

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

Đầu ra

[[9, 1, 2, ],[3, 4, 5, ],[6, 7, 8, ],]