Bài toán
In ma trận vuông n×n theo đường chéo xen kên (zigzag), thay đổi hướng sau mỗi đường chéo.
Ví dụ 3×3
Ma trận: 10 20 30 40 50 60 70 80 90 Output: 10 20 40 70 50 30 60 80 90

Thuật toán
Duyệt theo đường chéo, dùng cờ flag đổi hướng (chéo lên/xuống). Xử lý 2 nửa: nửa trên (độ dài tăng) và nửa dưới (giảm).
Mã nguồn C
#include <stdio.h>
#include <stdbool.h>
#define C 3
#define min(a,b) ((a>b)?b:a)
#define max(a,b) ((a>b)?a:b)
int main() {
int k=3, l=3;
int mat[3][3] = {{10,20,30},{40,50,60},{70,80,90}};
int row=0, col=0;
bool flag = false;
int mn = min(k,l);
// Nửa trên
for (int len=1; len<=mn; ++len) {
for (int i=0; i0; --diag) {
int len = (diag > mn) ? mn : diag;
for (int i=0; i
Kết quả
10 20 40 70 50 30 60 80 90