我是新手程序员,我想找一种方法来求矩阵的行列式。我在网上找到了这段代码,但我不太理解其中的算法。我对于递归的基础没有问题,但是循环和主要过程我有点难以理解。非常感谢任何能够向我解释算法的人。
int determ(int a[MAX][MAX],int n) {
int det=0, p, h, k, i, j, temp[MAX][MAX];
if(n==1) {
return a[0][0];
} else if(n==2) {
det=(a[0][0]*a[1][1]-a[0][1]*a[1][0]);
return det;
} else {
for(p=0;p<n;p++) {
h = 0;
k = 0;
for(i=1;i<n;i++) {
for( j=0;j<n;j++) {
if(j==p) {
continue;
}
temp[h][k] = a[i][j];
k++;
if(k==n-1) {
h++;
k = 0;
}
}
}
det=det+a[0][p]*pow(-1,p)*determ(temp,n-1);
}
return det;
}
}
temp
中生成子式。此方法计算行列式的方式非常糟糕。 - Joker_vDp
列,你需要在从a
复制元素到temp
时跳过该列。其中,子式是指去掉某些行和列后剩余元素所组成的矩阵。 - Joker_vDpow(-1,p)
一眼就能看出代码有多好... - Marc Glisse