ในปัญหานี้ เราได้รับเมทริกซ์ 2 มิติ งานของเราคือพิมพ์องค์ประกอบทั้งหมดของเมทริกซ์ในลำดับแนวทแยง
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
1 2 3 4 5 6 7 8 9
ผลลัพธ์ −
1 4 2 7 5 3 8 6 9
มาดูรูปแบบที่ตามมาขณะพิมพ์เมทริกซ์ในรูปแบบซิกแซกหรือแนวทแยง
นี่คือวิธีการทำงานของเส้นทแยงมุม
จำนวนบรรทัดในเอาต์พุตจะขึ้นอยู่กับแถวและคอลัมน์ของเมทริกซ์ 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