/*************************************************************
算法篇之
n阶行列式求值
编写:陶鹏
**************************************************************/
#include<stdio.h>
#include<malloc.h>
//函数声明
int resultDet_n(int *pDet ,int iN) ; //n阶行列式求值
int Num_Factor(int iN) ; //求全排列的个数
void Full_Arrange(int maxN ,int iN ,int *pArray,int *numAll) ; //求全排列的展开项
int Resverse_Num(int iCount ,int *numArray) ; //求逆序数
void main()
{
unsigned int iDet_N=0 ;//储存行列式大小
unsigned int Count_R=0 ,Count_C=0; //列和行循环变量
int *pDet; //行列式入口地址
int iDet_result=0 ; //行列式的值
while(1)
{
printf("请输入行列式的大小N(不超过12): ") ; //获取行列式的大小
scanf_s("%d",&iDet_N,1) ;
printf("\n") ;
if(iDet_N < 2 || iDet_N > 12) //检查N值是否符合要求
{
printf("N值超出范围! 按任意键退出...") ;
scanf("%*C%*C") ;
exit(0) ;
}
pDet = (int *)(malloc(iDet_N*iDet_N*sizeof(int))); //开辟储存行列式所需空间
for(Count_R=0 ;Count_R < iDet_N ;Count_R++) //获取行列式
{
printf("请输入第 %d 行: ",Count_R+1) ;
for(Count_C=0 ;Count_C<iDet_N ;Count_C++)
{
scanf_s("%d",pDet+Count_R*iDet_N+Count_C,1) ;
}
}
printf("\n输入的行列式为:\n") ; //输出行列式内容
for(Count_R=0 ;Count_R < iDet_N ;Count_R++)
{
printf(" | ") ;
for(Count_C=0 ;Count_C < iDet_N ;Count_C++)
{
printf("%-4d",*(pDet+Count_R*iDet_N+Count_C)) ;
}
printf(" |\n") ;
}
iDet_result = resultDet_n(pDet ,iDet_N) ; //计算行列式