#include
using namespace std;
double cal(double** det, int n)/*二维数组调用函数,
详见 https://blog.csdn.net/poinsettia/article/details/109675513?utm_source=app&app_version=5.3.0&code=app_1562916241&uLinkId=usr1mkqgl919blen*/
{
double detVal = 0;//行列式值
if (n == 1)//递归终止条件
return det[0][0];
double** tempdet = new double* [n - 1];//用来存储余相应的余子式,行列式阶数会--
for (int i = 0; i < n - 1; i++)
tempdet[i] = new double[n - 1];
for (int i = 0; i < n; i++)//第一重循环,行列式按第一行展开
{
for (int j = 0; j < n - 1; j++)//求低阶行列式各元素值
for (int k = 0; k < n - 1; k++)
{
if (k < i)
tempdet[j][k] = det[j + 1][k];//附图一
else
tempdet[j][k] = det[j + 1][k + 1];//附图二
}
detVal += det[0][i] * pow(-1.0, i) * cal(tempdet, n - 1);
}
return detVal;
}
int main()
{
int n;
while (cin >> n)//输入行列式的阶数
{
double** det = new double* [n];//二维数组动态定义 ,一维数组则是int *det=new double [n]
for (int i = 0; i < n; i++)
det[i] = new double[n];//按行分配内存
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> det[i][j];//输入行列式
cout << cal(det, n);
}
}
改编于博主一只没有情感的机器猪
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)