สมมติว่าเรามีตาราง 2D ขนาด m x n เรามีตัวแปรอื่น 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 :=องค์ประกอบด้านล่างขวา
-
สำหรับ i :=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]
-
-
-
G[0, 0] :=x
-
เรียกการดำเนินการกะตามกฎต่อไปนี้ -
-
ในขณะที่ k ไม่ใช่ 0
-
เลื่อนกริด G
-
ลด k ลง 1
-
-
กลับกริด G
ตัวอย่าง (C++)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#includeใช้เนมสเปซ std;void print_vector(vector > v){ cout <<"["; for(int i =0; i >&grid){ int n =grid.size(); int m =กริด[0].size(); int x =ตาราง[n-1][m-1]; for(int i =n-1; i>=0; i--){ สำหรับ(int j =m-1;j>=0;j--){ if(j ==0 &&i>0){ กริด[i][j] =กริด[i-1][m-1]; } อื่น ๆ if(j>0){ grid[i][j] =grid[i][j-1]; } } } ตาราง[0][0] =x; } vector > shiftGrid(vector >&g, int k) { ในขณะที่ (k--){ shift(g); } กลับ g; }};main(){ โซลูชัน ob; เวกเตอร์<เวกเตอร์ > 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, ],]