C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で2Dグリッドをシフト


サイズmxnの2Dグリッドが1つあるとします。別の変数kがあります。グリッドをk回シフトする必要があります。シフト操作は以下のようになります

  • グリッドG[i、j]の要素がG [i、j + 1]

    に移動します
  • グリッドG[i、n –1]の要素がG[i + 1、0]

    に移動します
  • グリッドG[m-1、n –1]の要素がG[0、0]

    に移動します

したがって、グリッドが-

のような場合
1 2 3
4 5 6
7 8 9
出力は-

になります
9 1 2
3 4 5
6 7 8

これを解決するには、次の手順に従います-

  • シフト操作は、マトリックスを入力として受け取ります

  • n =行数、m:=列数、x:=右下の要素

  • for i:=n – 1、0まで

    • for j:=m –1から0まで

      • j =0かつi>0の場合、G [i、j]:=G [i – 1、m-1]

      • それ以外の場合、j> 0の場合、G [i、j]:=G [i、j – 1]

  • G [0、0]:=x

  • 次のルールでシフト操作を呼び出します-

  • kが0ではない間

    • グリッドをシフトG

    • kを1減らします

  • リターングリッドG

例(C ++)

理解を深めるために、次の実装を見てみましょう-

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

入力

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

出力

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

  1. C++でプロセスを強制終了します

    n個のプロセスがあるとします。ここでは、各プロセスにPIDまたはプロセスIDと呼ばれる一意のIDがあり、そのPPID(親プロセスID)もそこにあります。 各プロセスには1つの親プロセスしかありませんが、1つ以上の子プロセスがある場合があります。 これは木の構造のようなものです。 PPID =0のプロセスは1つだけです。これは、このプロセスに親プロセスがないことを意味します。すべてのPIDは一意の正の整数になります。 プロセスのリストを表すために2つの整数のリストを使用します。最初のリストには、各プロセスのPIDが含まれ、2番目のリストには対応するPPIDが含まれます。したがって、2つのリ

  2. C++でのリスのシミュレーション

    木、リス、そしていくつかのナッツがあります。位置は、2Dグリッドのセルで表されます。あなたの目標は、リスがすべてのナッツを集めて、それらを1つずつ木の下に置くための最小距離を見つけることです。リスは一度に最大で1つのナットしかとることができず、隣接するセルに向かって上下左右の4つの方向に移動できます。距離は移動回数で表されます。 したがって、入力が高さ:5幅:7木の位置:[2,2]リス:[4,4]ナッツ:[[3,0]、[2,5]]の場合、出力は12になります。 、 これを解決するには、次の手順に従います- 関数calc()を定義します。これには、x1、y1、x2、y2、が必要で