/*********************************************************************************
计算行列式
作者:李鑫磊
*********************************************************************************/
#include <iostream>
using namespace std;
/***************************************************************************
功能:把一个行列式中指定的一行一列去除,且取出行列相交的那个数
形式:void cut(int data[20][20],int news[20][20],int size,int a,int b,int &c)
输入:
输出:
附注:c为目标点的值,a为行号,b为列号,size为矩阵大小
***************************************************************************/
void cut(int data[20][20],int news[20][20],int size,int a,int b,int &c)
{
c=data[a][b];
int i,j,k;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
news[i][j]=data[i][j];
for(i=0;i<size-1;i++)
{
if(i>=a) //遍历到了需要覆盖的行
{
for(k=0;k<size;k++)
{
news[i][k]=news[i+1][k];
}
}
for(j=0;j<size-1;j++)
{
if(j>=b)
{
news[i][j]=news[i][j+1];
}
}
news[i][j]=0;//最后一列归零
}
//最后一行归零
for(k=0;k<size;k++)
{
news[i][k]=0;
}
}
////////////////////////////////////////////////////////////////////////////////////////
//矩阵的类
//构造函数设置了初始的矩阵大小
class Juzheng
{
private:
int Size;//大小
int data[20][20];//矩阵
public:
Juzheng(int a=1)
{
Size=a;
int i,j;
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
data[i][j]=0;
}
}
}
int suan(int a[20][20],int size);
void set();
};
/***************************************************************************
功能:构造函数 函数体
形式:void Juzheng::set()
输入:举证数据
输出:计算结果
附注:输入时注意矩阵大小
***************************************************************************/
void Juzheng::set()
{
cout<<"您输入的矩阵是"<<Size<<'*'<<Size<<"大小的\n请输入他们的数据:"<<endl;
int i,j;
for(i=0;i<Size;i++)
{
for(j=0;j<Size;j++)
{
cin>>data[i][j];
}
}
cout<<"最后的结果是:"<<suan(data,Size)<<endl;
}
/***************************************************************************
功能:用矩阵展开法来求行列式结果
形式:int Juzheng::suan(int a[20][20],int size)
输入:
输出:
附注:size 为矩阵大小
***************************************************************************/
int Juzheng::suan(int a[20][20],int size)
{
//回归条件当矩阵大小为2时
if(size==2)
{
return a[0][0]*a[1][1]-a[1][0]*a[0][1];
}
int i,sum=0;
for(i=0;i<size;i++)
{
int news[20][20],x;
cut(a,news,size,0,i,x);
if(i%2==0)//行号+列号 为偶
{
sum+=x*suan(news,size-1);
}
else//行号+列号 为奇
{
sum+=x*suan(news,size-1)*(-1);
}
}
return sum;
}
void main()
{
cout<<"---------------------计算行列式的值-----------------------------------"<<endl;
cout<<"请输入你的矩阵大小:(如:4 为4*4)"<<endl;
int size;
cin>>size;
Juzheng A(size);
A.set();
}
/*
输入实例:
2 1 -5 8
1 -3 0 9
0 2 -1 -5
1 4 -7 0
结果为27
*/