Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Shift 2D Grid ใน C ++


สมมติว่าเรามีตาราง 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, ],]