我需要为给定的 N 创建 N*N 矩阵,该矩阵在行、单元格、次要和主要对角线中没有重复,并且值为 1、2、3、....、N。
对于 N = 4,其中一个矩阵如下:
1 2 3 4
3 4 1 2
4 3 2 1
2 1 4 3
最佳答案
问题概述
您描述的数学结构是对角拉丁方。构建它们是比算法或程序更数学的问题。
要正确理解它是什么以及如何创建,您应该阅读以下文章:
Diagonal Latin square construction <-- p.2 是对你的问题的回答,有证据和其他有趣的属性
简答
构造对角拉丁方的可能方法之一:
令N 是所需矩阵L 的幂。
如果[0; 范围内存在数字A和B; N-1]
满足属性:
A 相对于 N
B 与 N
互质
(A + B)与N
互质(A - B) 与 N
互质
然后您可以使用以下规则创建所需的矩阵:
L[i][j] = (A * i + B * j) mod N
关于生成对角拉丁方矩阵的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065138/