JAVA 蓝桥杯 算法提高 计算行列式
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
//据说很多人的题目会有一大堆废话,本傻×就不在这里废话了
给定一个N×N的矩阵A,求|A|。
输入格式
第一行一个正整数N。
接下来N行,每行N个整数,第i行第j个数字表示A[i][j]。
输出格式
一行,输出|A|。
样例输入
2
1 2
3 4
样例输出
-2
数据规模和约定
0<N≤6
-10≤A[i][j]≤10
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int[][] a=new int[n][n];
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
a[i][j]=sc.nextInt();
}
}
int ans=dfs(a,n);
System.out.println(ans);
}
public static int dfs(int[][] a, int n) {
if(n==1) return a[0][0];
if(n==2)return a[0][0]*a[1][1]-a[0][1]*a[1][0];
int ans=0;
int[][] b=new int[n][n];
for(int i=0;i<n;i++) {
for(int row=0;row<n-1;row++) {
for(int col=0;col<i;col++) {
b[row][col]=a[row+1][col];
}
for(int col=i;col<n-1;col++) {
b[row][col]=a[row+1][col+1];
}
}
ans+=a[0][i]*dfs(b,n-1)*(i%2==0?1:-1);
}
return ans;
}
}