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

การข้ามซิกแซก (หรือแนวทแยง) ของเมทริกซ์ใน C++


ในปัญหานี้ เราได้รับเมทริกซ์ 2 มิติ งานของเราคือพิมพ์องค์ประกอบทั้งหมดของเมทริกซ์ในลำดับแนวทแยง

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

1    2    3
4    5    6
7    8    9

ผลลัพธ์ −

1
4    2
7    5    3
8    6
9

มาดูรูปแบบที่ตามมาขณะพิมพ์เมทริกซ์ในรูปแบบซิกแซกหรือแนวทแยง

การข้ามซิกแซก (หรือแนวทแยง) ของเมทริกซ์ใน C++

นี่คือวิธีการทำงานของเส้นทแยงมุม

จำนวนบรรทัดในเอาต์พุตจะขึ้นอยู่กับแถวและคอลัมน์ของเมทริกซ์ 2 มิติเสมอ

สำหรับเมทริกซ์เมทริกซ์ 2 มิติ[r][c] จะเป็นบรรทัดเอาต์พุต r+c-1

ตัวอย่าง

มาดูวิธีแก้ปัญหาของโปรแกรมกัน

#include <iostream>
using namespace std;
#define R 5
#define C 4
int min2(int a, int b)
{ return (a < b)? a: b; }
int min3(int a, int b, int c)
{ return min2(min2(a, b), c);}
int max(int a, int b)
{ return (a > b)? a: b; }
void printDiagonalMatrix(int matrix[][C]){
   for (int line=1; line<=(R + C -1); line++){
      int start_col = max(0, line-R);
      int count = min3(line, (C-start_col), R);
      for (int j=0; j<count; j++)
      cout<<matrix[min2(R, line)-j-1][start_col+j]<<"\t";
      cout<<endl;
   }
}
int main(){
   int M[R][C] = {{1, 2, 3, 4},
      {5, 6, 7, 8},
      {9, 10, 11, 12},
      {13, 14, 15, 16},
      {17, 18, 19, 20},};
   cout<<"The matrix is : \n";
   for (int i=0; i< R; i++){
      for (int j=0; j<C; j++)
      cout<<M[i][j]<<"\t";
      cout<<endl;
   }
   cout<<"\nZigZag (diagnoal) traversal of matrix is :\n";
   printDiagonalMatrix(M);
   return 0;
}

ผลลัพธ์

The matrix is :
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
ZigZag (diagonal) traversal of matrix is :
1
5 2
9 6 3
13 10 7 4
17 14 11 8
18 15 12
19 16
20