根据线性代数按行展开的计算原理,实现n*n的行列式的计算,暂时限制n的取值为1<=n<=10
具体代码如下
#include <iostream>
#include <vector>
using namespace std;
int calcu(int n, vector<vector<int> >a){
if(n == 2)
return a[0][0]*a[1][1]-a[0][1]*a[1][0];
else{
int sum = 0;
for(int k=0; k<n; k++){
vector<vector<int> > b;
for(int i=1; i<n; i++){
vector<int>c;
for(int j=0; j<n; j++){
if(j == k) continue;
c.push_back(a[i][j]);
}
b.push_back(c);
}
sum = k%2==0 ? sum+a[0][k]*calcu(n-1, b) : sum-a[0][k]*calcu(n-1, b);
}
return sum;
}
}
int main() {
int n,x;
vector<vector<int> >a;
cin>>n;
if(n == 1){
cin>>x;
cout<<x<<endl;
}
else{
for(int i=0; i<n; i++){
vector<int>b;
for(int j=0; j<n; j++){
cin>>x;
b.push_back(x);
}
a.push_back(b);
}
cout<<calcu(n, a)<<endl;
}
}