看到题目的时候,查了一下“Determinant”——行列式。没学过线代的哭瞎。大一不开线代课的感觉除了我们学院也没谁了
后来参考算导713页(原书1223页)递归的算法做了一遍。
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
struct Matrix
{
int f[12][12];
void init0()
{
memset(f, 0, sizeof(f));
}
};
int det(Matrix oldm, int n, int y)
{
int i, j, temp, sum;
Matrix m;
m.init0();
if (y>0)
{
for (i = 1; i <= n; i++)
for (j = 1; j <= n + 1; j++)
m.f[i][j] = oldm.f[i + 1][j];
for (j = y; j <= n; j++)
for (i = 1; i <= n; i++)
m.f[i][j] = m.f[i][j + 1];
}
else m = oldm;
if (n == 1) return m.f[1][1];
sum = 0;
for (j = 1; j <= n; j++)
{
temp = m.f[1][j] * det(m, n - 1, j);
if (j & 1) sum += temp; else sum -= temp;
}
return sum;
}
void work(int n)
{
int i, j;
Matrix m;
int ans;
ans = 0;
m.init0();
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
scanf("%d", &m.f[i][j]);
ans = det(m, n, 0);
printf("%d\n", ans);
}
int main()
{
int n;
while (~scanf("%d", &n))
work(n);
return 0;
}