这几天在学习线性代数 ,第一章节,行列式的相关问题,这里就行列式怎么计算给出实现(java实现)
我的思路是这样的 使用dfs深度搜索算法进行搜索
最简单的情况是2*2的行列式,据此我们可以得出代码:
public static int fun(int[][] arr) {
// 最简单的实现
if (arr.length == 2) {
return arr[0][0] * arr[1][1] - arr[0][1] * arr[1][0];
} else {
// 获取当前行列式的宽度
int len = arr.length;
// 定义一个二维数组 保存稍微简单的数组 就是 少一个宽度的行列式
int[][] temp = new int[len - 1][len - 1];
// 此处a,b表示temp数组的索引
int a, b;
// 最终结果
int total = 0;
// 深度优先 搜索每一种情况
for (int i = 0; i < len; i++) {
// 当前值
int num = arr[0][i];
// 初始化a,b
a = 0;
b = 0;
// 设置符号
int sign = (int) Math.pow(-1, i);
// 进行temp数组赋值
for (int m = 1; m < len; m++) {
for (int n = 0; n < len; n++) {
// 当不是当前列时
if (n != i) {
if (b == len - 1) {
a++;
b = 0;
}
temp[a][b++] = arr[m][n];
} else {
continue;
}
}
}
// 进行深搜 获取值 累加到total上
total += (sign * num * fun(temp));
}
// 返回结果
return total;
}
}
这一种方法其实不难想,根据,所谓dfs就是一条路走到头 ,直到走到头了,然后返回到倒数第二步 ,再朝着另一个方向走 就行了