मान लीजिए कि हमारे पास 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, ],]