计算行列式的实现

这几天在学习线性代数 ,第一章节,行列式的相关问题,这里就行列式怎么计算给出实现(java实现)
计算行列式的实现_第1张图片
我的思路是这样的 使用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就是一条路走到头 ,直到走到头了,然后返回到倒数第二步 ,再朝着另一个方向走 就行了

你可能感兴趣的:(算法与数据结构)