二维数组是计算小规模方阵行列式的最直接方式,适用于2×2、3×3等阶数,可用公式法或递归拉普拉斯展开;需确保方阵、深拷贝子矩阵、防整数溢出及浮点精度问题。

计算矩阵行列式时,用二维数组存储矩阵是最直接的方式,尤其适合小规模方阵(如2×2、3×3),代码简洁、逻辑清晰。
二维数组如何表示方阵
行列式只对方阵有意义,因此二维数组必须是 n × n 形式。例如,一个3阶矩阵可定义为:
// C/C++ 风格示例
int matrix[3][3] = {
{2, 1, 3},
 {0, 4, 1},
{1, 2, 5}
};
在其他语言中(如Python),可用嵌套列表:[[2,1,3], [0,4,1], [1,2,5]],访问元素统一用 matrix[i][j] 表示第i行第j列(索引从0开始)。
2×2 和 3×3 的直接公式法
小阶数推荐直接展开,避免递归或高斯消元的开销:
- 2×2 行列式:det = a[0][0]×a[1][1] − a[0][1]×a[1][0]
- 3×3 行列式(按第一行展开):
det = a[0][0]×(a[1][1]×a[2][2]−a[1][2]×a[2][1])
− a[0][1]×(a[1][0]×a[2][2]−a[1][2]×a[2][0])
+ a[0][2]×(a[1][0]×a[2][1]−a[1][1]×a[2][0])
通用递归实现(拉普拉斯展开)
对任意n阶方阵,可用代数余子式递归计算:
- 选某一行(通常第一行),对每个元素
matrix[0][j]计算其代数余子式 - 余子式是去掉第0行和第j列后形成的(n−1)×(n−1)子矩阵的行列式
- 符号因子为 (−1)j,即交替加减
- 递归出口:n == 1 时返回唯一元素;n == 2 时用公式直接算
注意:该方法时间复杂度为 O(n!),仅适用于 n ≤ 6 的场景;大矩阵应改用高斯消元转上三角矩阵再求积。
避免常见错误
用二维数组实现时容易忽略的细节:
- 确保输入是方阵——检查行数与列数是否相等,否则行列式无定义
- 递归中构造子矩阵需深拷贝,不能简单指针偏移(尤其在C中)
- 整数运算可能溢出,较大数值建议用
long long或浮点类型 - 浮点矩阵需考虑精度问题,避免用 == 判断零值,应设小阈值(如
fabs(x) )

















