Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी++ में शिफ्ट 2डी ग्रिड


मान लीजिए कि हमारे पास m x n आकार का एक 2D ग्रिड है। हमारे पास एक और चर 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:=निचला दायाँ तत्व

  • मैं के लिए :=n-1, 0 से नीचे

    • 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]

  • जी[0, 0] :=x

  • निम्नलिखित नियम से शिफ्ट ऑपरेशन को कॉल करें -

  • जबकि k 0 नहीं है

    • ग्रिड G को शिफ्ट करें

    • k को 1 से घटाएं

  • वापसी ग्रिड जी

उदाहरण (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++ . में विकर्ण ट्रैवर्स II

    मान लीजिए कि हमारे पास nums नामक सूचियों की एक सूची है, हमें अंकों के सभी तत्वों को विकर्ण क्रम में दिखाना होगा। तो, अगर इनपुट पसंद है तो आउटपुट [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16] होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक सरणी रिट परिभाषित करें एक 2डी सरणी को परिभाषित

  1. सी ++ में प्रक्रिया को मारें

    मान लीजिए कि हमारे पास n प्रक्रियाएं हैं, यहां प्रत्येक प्रक्रिया की एक विशिष्ट आईडी होती है जिसे PID या प्रक्रिया आईडी कहा जाता है और उसका PPID (पैरेंट प्रोसेस आईडी) भी होता है। प्रत्येक प्रक्रिया में केवल एक पैरेंट प्रक्रिया होती है, लेकिन इसमें एक या अधिक चाइल्ड प्रक्रियाएं हो सकती हैं। यह एक प

  1. सी ++ में गिलहरी सिमुलेशन

    एक पेड़, एक गिलहरी, और कई नट हैं। स्थितियों को 2डी ग्रिड में कोशिकाओं द्वारा दर्शाया जाता है। आपका लक्ष्य गिलहरी के लिए सभी नटों को इकट्ठा करने और उन्हें एक-एक करके पेड़ के नीचे रखने के लिए न्यूनतम दूरी का पता लगाना है। गिलहरी एक समय में केवल एक अखरोट ले सकती है और चार दिशाओं में - ऊपर, नीचे, बाएँ औ