行列式计算程序
与西电大佬一起完成
#include<bits/stdc++.h>
using namespace std;
int oj(int n)
{
if(n%2!=0) return 1;
else return 0;
}
int jc(int n)
{
int ans1=1;
for(int i=1;i<=n;i++)
{
ans1=ans1*i;
}
return ans1;
}
int main()
{
int n,ans=0,s=0;
cin>>n;
int A=jc(n);
int b[A][n];
int c[A+10];
int nx[A+10];
for(int i=0;i<n;i++)
{
c[i]=i+1;
}
do{
for(int i=0;i<n;i++){
b[s][i]=c[i];
}
s++;
}while(next_permutation(c,c+n));
for(int c=0;c<A;c++)
{
int ansn=0;
for(int i=0;i<n;i++)
{
for(int j=n-1;j>=i;j--)
{
if(b[c][i]>b[c][j]) ansn++;
}
}
nx[c]=ansn;
}
int a[n+10][n+10];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<A;i++)
{
int ansc=1;
for(int j=1;j<=n;j++)
{
ansc=ansc*a[j][b[i][j-1]];
}
if(oj(nx[i])==1){
ans=ans-ansc;
}
else ans=ans+ansc;
}
cout<<ans<<endl;
return 0;
}

浙公网安备 33010602011771号