Skip to content

14137: 【原4137】行列式求值

题目

题目描述

author: fur 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/4137

行列式求值

题目描述

现在给出一个\(n\)阶行列式,求出它的值。

输入格式

第一行一个数\(n\)表示行列式阶数
接下来是一个\(n\)行\(n\)列的由整数构成的行列式

样例输入

3  
5 1 2  
4 2 5  
3 4 1

样例输出

-59

数据规模

\(1\leq n\leq 10\)
答案在int范围之内

satgo1546's solution

#include <cstdio>

int det(int a[10][10], int n) {
    int minor[10][10];
    int r = 0;
    int sgn = 1;
    if (n == 2) return a[0][0] * a[1][1] - a[1][0] * a[0][1];
    for (int i = 0; i < n; i++) {
        int c1 = 0, c2 = 0;
        for (int j = 1; j < n; j++) {
            for (int k = 0; k < n; k++) {
                if (k != i) {
                    minor[c1][c2] = a[j][k];
                    c2++;
                    if (c2 > n - 2) {
                        c2 = 0;
                        c1++;
                    }
                }
            }
        }
        r += sgn * (a[0][i] * det(minor, n - 1));
        sgn = -sgn;
    }
    return r;
}

int main() {
    int a[10][10];
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            scanf("%d", &a[i][j]);
        }
    }
    printf("%d\n", det(a, n));
}