In các phần tử của ma trận theo hình chữ Z. Ví dụ ma trận 4x4:
5 8 7 1 2 3 6 4 1 7 8 9 4 8 1 5
In theo Z: 5, 8, 7, 1, 6, 7, 4, 8, 1, 5
Thuật toán
- In hàng đầu tiên (từ cột 0 đến n-1).
- In đường chéo phụ: từ (1, n-2) đến (n-2, 1) - chỉ số hàng tăng, cột giảm.
- In hàng cuối cùng (từ cột 1 đến n-1).
Code ví dụ
#include <iostream>
#define MAX 4
using namespace std;
void printMatrixZ(int mat[][MAX], int n) {
// In hàng đầu
for(int i = 0; i < n; i++) {
cout << mat[0][i] << " ";
}
// In đường chéo phụ
int i = 1, j = n - 2;
while(i < n && j >= 0) {
cout << mat[i][j] << " ";
i++;
j--;
}
// In hàng cuối (bỏ phần tử đầu đã in ở đường chéo)
for(int i = 1; i < n; i++) {
cout << mat[n-1][i] << " ";
}
}
int main() {
int matrix[][MAX] = {
{5, 8, 7, 1},
{2, 3, 6, 4},
{1, 7, 8, 9},
{4, 8, 1, 5}
};
printMatrixZ(matrix, 4);
return 0;
}
Kết quả
5 8 7 1 6 7 4 8 1 5
Độ phức tạp
- Thời gian: O(n) - chỉ duyệt qua ~3n phần tử
- Không gian: O(1)
Lưu ý
Chỉ áp dụng cho ma trận vuông (n x n). Với ma trận không vuông, cần điều chỉnh logic đường chéo.