ในปัญหานี้ เราได้รับเมทริกซ์ 2 มิติ งานของเราคือพิมพ์องค์ประกอบทั้งหมดของเมทริกซ์ในลำดับแนวทแยงมุม (diagonal order)
มาดูตัวอย่างเพื่อเข้าใจปัญหา:
1 2 3 4 5 6 7 8 9
ผลลัพธ์ -
1 4 2 7 5 3 8 6 9
มาดูรูปแบบที่ปฏิบัติตามขณะพิมพ์เมทริกซ์ในรูปแบบ zigzag หรือ diagonal

นี่คือวิธีที่ diagonal traversal ทำงาน
จำนวนบรรทัดในผลลัพธ์จะขึ้นอยู่กับแถวและคอลัมน์ของเมทริกซ์ 2 มิติเสมอ
สำหรับเมทริกซ์ 2 มิติ mat[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 (diagonal) 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