前一段时间在复习线性代数的知识;实现一下关于行列式的计算;我们再线性代数里,关于行列式的话,我们知道;AxA* = |A|I;需要伴随矩阵;但是我个人认为,因为有计算机的存在,所以是不是可以硬算行列式?反正我是这么写的;就是通过递归计算代数余子式;直接看代码吧;
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
int daishuyuzhishi(int**arr, int**arr_tmp, int hang, int lie,int x,int y)
{
int i, j;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
arr_tmp[i][j] = arr[i][j];
}
}
for (i = x + 1; i < hang; i++)
{
for (j = y + 1; j < lie; j++)
{
arr_tmp[i - 1][j - 1] = arr[i][j];
}
}
for (i = x + 1; i < hang; i++)
{
for (j = 0; j < y; j++)
{
arr_tmp[i - 1][j] = arr[i][j];
}
}
for (i = 0; i < x; i++)
{
for (j = y + 1; j < lie; j++)
{
arr_tmp[i][j-1] = arr[i][j];
}
}
return 0;
}
int hanglieshical(int** arr, int hang, int lie)
{
if (arr == NULL || *arr == NULL || hang != lie)
{
printf("the input error!\n");
return -1;
}
if (hang == 2)
{
int sum = arr[0][0] * arr[1][1] - arr[0][1] * arr[1][0];
return sum;
}
int i, j, sum = 0;
int**arr_tmp = (int**)calloc(hang-1,sizeof(int*));
for (i = 0; i < hang - 1; i++)
arr_tmp[i] = (int*)calloc(lie - 1, sizeof(int));
for (i = 0; i < hang; i++)
{
for (j = 0; j < lie; j++)
{
daishuyuzhishi(arr, arr_tmp, hang, lie, i, j);
sum += pow(-1,(i+j))*arr[i][j] * hanglieshical(arr_tmp, hang - 1, lie - 1);
}
}
return sum;
}
int main(void)
{
int sum;
int i,j,k = 1;
int**arr = (int**)calloc(3, sizeof(int*));
for (i = 0; i < 3; i++)
arr[i] = (int*)calloc(3, sizeof(int));
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
arr[i][j] = k;
if (i == 2 && j == 1)
{
k += 2;
}
else
k++;
}
}
sum = hanglieshical(arr, 3, 3);
printf("the sum is %d\n", sum);
return 0;
}
如果大家还有什么好的建议,也欢迎提问和给出建议,谢谢~