Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Duyệt Zig Zag (đường chéo) của ma trận trong C++


Trong bài toán này, chúng ta được cho một ma trận 2D. Nhiệm vụ là in tất cả các phần tử của ma trận theo thứ tự đường chéo (diagonal).

Ví dụ minh họa:

1   2   3 
4   5   6 
7   8   9

Kết quả -

1 4   2 7   5   3 8   6 9

Hãy xem mẫu được tuân theo khi in ma trận theo dạng Zig Zag hoặc đường chéo.

Duyệt Zig Zag (đường chéo) của ma trận trong C++

Đây là cách duyệt đường chéo hoạt động.

Số dòng trong kết quả luôn phụ thuộc vào số hàng và cột của ma trận 2D.

Đối với ma trận mat[r][c], sẽ có r+c-1 dòng đầu ra.

Chương trình minh họa

Dưới đây là code triển khai giải pháp:

#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 << "Ma trận là: \n"; 
    for (int i = 0; i < R; i++) { 
        for (int j = 0; j < C; j++) 
            cout << M[i][j] << "\t"; 
        cout << endl; 
    } 
    cout << "\nDuyệt ZigZag (đường chéo) của ma trận là:\n"; 
    printDiagonalMatrix(M); 
    return 0; 
}

Kết quả

Ma trận là: 
1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 
17 18 19 20 

Duyệt ZigZag (đường chéo) của ma trận là: 
1 5 2 9 6 3 13 10 7 4 17 14 11 8 18 15 12 19 16 20