【发布时间】:2014-02-08 19:49:38
【问题描述】:
我是编程新手,我一直在寻找一种方法来找到矩阵的行列式。我在网上找到了这段代码,但我无法理解这里的算法。我对 recursion 的基础没有任何问题,但是 continue 和 main 循环我很难理解。非常感谢任何可以向我解释算法的人。
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中形成未成年人。此外,这是一种计算行列式的可怕方法。 -
@user3144334 次要矩阵是一排一列的矩阵。这里使用的未成年人都是第一行被扔掉的,要扔
pth列,你必须在将元素从a复制到temp时跳过它 -
以超指数的复杂性计算行列式,干得好……甚至是
pow(-1,p),一眼就能看出代码有多好……
标签: c++ algorithm matrix determinants