Ma trận Latin cấp n: ma trận n×n mỗi hàng và mỗi cột là hoán vị của 1..n.
Đặc điểm: Hàng i bắt đầu bằng n-i+1 (hoặc xoay vòng).
Ví dụ n=4
1 2 3 4 4 1 2 3 3 4 1 2 2 3 4 1
Thuật toán
- Hàng
i(0-indexed): bắt đầu từn-i, tăng dần, quay vòng. - Công thức:
a[i][j] = (n - i + j - 1) % n + 1
Triển khai C++
#include <bits/stdc++.h>
using namespace std;
void latinSquare(int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int val = (n - i + j - 1) % n + 1;
cout << val << ' ';
}
cout << endl;
}
}
int main() {
latinSquare(4);
return 0;
}
Kết quả
1 2 3 4 4 1 2 3 3 4 1 2 2 3 4 1