定义法求行列式的值
很多小伙伴对求行列式的值呢很是头疼,于是我想编一个程序来计算行列式的值,其实行列式计算的关键在于写出列的全排列,要理解这一点也不难,给出公式即可明白!
上代码!
#include<stdio.h>
#include<math.h>
int a[100],book[100],n,b[10][10],x=1,sum=0;
void dfs(int step){
int i,j,s,t;
if(step==n+1){
x=1,s=0;
for(i=1;i<=n;i++){ //求逆序数
for(j=i+1;j<=n;j++){
if(a[i]>a[j])
s++;
}
}
for(i=0;i<n;i++){
x*=b[i][a[i+1]];
}
t=pow(-1,s);
//printf("%d\n",x*t);
sum+=x*t;
return;
}
for(i=0;i<n;i++){
if(book[i]==0){
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
}
}
return;
}
int main()
{
int step,i,j;
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&b[i][j]);
}
}
step=1;
dfs(step);
printf("%d",sum);
return 0;
}
本人水平有限,所以这里的全排列的写法采用的深度优先搜索的方法,有兴趣的童鞋可以去了解一下。