JAVA 蓝桥杯 算法提高 计算行列式

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;
	}
}

发布了30 篇原创文章 · 获赞 0 · 访问量 2072

猜你喜欢

转载自blog.csdn.net/qq_36551453/article/details/104559004