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

เกลียวเมทริกซ์ใน C ++


สมมติว่าเรามีเมทริกซ์และเราต้องพิมพ์องค์ประกอบเมทริกซ์ในลักษณะเกลียว ในตอนแรกเริ่มต้นจากแถวแรก ให้พิมพ์เนื้อหาทั้งหมดแล้วตามด้วยคอลัมน์สุดท้ายเพื่อพิมพ์ จากนั้นจึงพิมพ์แถวสุดท้าย จากนั้นจึงพิมพ์องค์ประกอบในลักษณะเกลียว ดังนั้นหากเมทริกซ์เป็นเหมือน −

1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18

แล้วผลลัพธ์จะเป็นเช่น [1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • currRow :=0 และ currCol :=0

  • ในขณะที่ currRow และ currCol อยู่ในช่วงเมทริกซ์

    • สำหรับฉันอยู่ในช่วง currCol และ n-1

      • แผ่นแสดงผล[currRow, i]

    • เพิ่ม CurrRow ขึ้น 1

    • สำหรับฉันอยู่ในช่วง currRow และ m-1 ทำ

      • แผ่นแสดงผล[i, n-1]

    • ลดลง 1

    • ถ้า currRow

      • สำหรับผม :=n-1 ลงไป currCol ทำ

        • แผ่นแสดงผล[m-1, i]

      • ลด m ลง 1

      • ถ้าcurrCol

        • สำหรับ i :=m-1 ลงไป currRow ทำ

          • แผ่นแสดงผล[i, currCol]

        • เพิ่ม currCol ขึ้น 1

ตัวอย่าง(C++)

ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −

#include <iostream>
#define ROW 3
#define COL 6
using namespace std;
int array[ROW][COL] = {{1, 2, 3, 4, 5, 6},
   {7, 8, 9, 10, 11, 12},
   {13, 14, 15, 16, 17, 18}};
void dispSpiral(int m, int n){
   int i, currRow = 0, currCol = 0;
   while (currRow < ROW && currCol < COL){
      for (i = currCol; i < n; i++){ //print the first row normally
      cout << array[currRow][i]<<" ";
   }
   currRow++; //point to next row
   for (i = currRow; i < m; ++i){ //Print the last column
      cout << array[i][n-1]<<" ";
   }
   n--; //set the n-1th column is current last column
   if ( currRow < m){ //when currRow is in the range, print the last row
      for (i = n-1; i >= currCol; --i){
         cout << array[m-1][i]<<" ";
      }
      m--; //decrease the row range
   }
   if (currCol < n){ //when currCol is in the range, print the fist column
      for (i = m-1; i >= currRow; --i){
         cout << array[i][currCol]<<" ";
      }
      currCol++;
      }
   }
}
int main(){
   dispSpiral(ROW, COL);
}

อินพุต

[[1,2,3,4,5,6]
[7,8,9,10,11,12]
[13,14,15,16,17,18]]

ผลลัพธ์

1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16