有多个测试数据。 对于每个组的测试数据,请输入表示方阵阶数的整数n。 然后输入n阶方阵。 输出其逆矩阵。 如果没有逆矩阵,则输出无反转矩阵。
#包含
#包含
#包含
用户命名空间STD;
常数双精度EPS=1e-6;
boolis_zero(constdoublenum ) )。
{
返回传真(num ) eps;
}
void create (双* *矩阵,常数整型) )。
{
矩阵=new double * [ n ];
for(intI=0; i n; I )
矩阵[ I ]=new double [ n ];
}
void input (双* *矩阵,常数输入) )。
{
for(intI=0; i n; I )
{
for(intj=0; j n; j )
CIN矩阵[ I ] [ j ];
}
}
bool inverse (双* *矩阵1,双* *矩阵2,常数int n ) ) ) )。
{
int i,j;
for(I=0; i n; I )
{
for(j=0; j n; j )
{
if(I==j ) ) )。
矩阵2 [ I ] [ j ]=1;
else
矩阵2 [ I ] [ j ]=0;
}
}
for(I=0; i n; I )
{
int rowmaxpos=i;
for(j=I1; j n; j )
{
if (矩阵1 [ I ] [ j ]矩阵1 [ I ] [ row maxpos ] )
rowmaxpos=j;
}
for(j=I; j n; j )
{
swap (矩阵1 [ j ] [ row maxpos ],矩阵1 [ j ] [ I ];
swap (矩阵2 [ j ] [ row maxpos ],矩阵2 [ j ] [ I ];
}
if (! is _ zero (矩阵1 [ I ] [ I ] ) )
{
int divisor=矩阵1 [ I ] [ I ];
for(j=I; j n; j )
{
矩阵1 [ I ] [ j ]/=戴维森;
矩阵2 [ I ] [ j ]/=戴维森;
}
for(j=I1; j n; j )
{
int multiple=矩阵1 [ j ] [ I ];
for(intk=I; k n; k )
{
矩阵1 [ I ] [ j ]-=矩阵1 [ I ] [ k ] * multiple;
矩阵2 [ I ] [ j ]-=矩阵2 [ I ] [ k ] * multiple;
}
}
}
else
返回假;
}
返回真;
}
void output (双* *矩阵,常数输入) )。
{
for(intI=0; i n; I )
{
for(intj=0; j n; j )
cout matrix[i][j] ';
出局了
}
}
void destroy (双* *矩阵,常数输入) ) ) ) ) ) ) ) )。
{
for(intI=0; i n; I )
delete [ ]矩阵[ I ];
delete [ ]矩阵;
}
int main () )
{
int n;
双精度* *矩阵1;
双精度* *矩阵2;
wile(CINn ) ) )。
{
创建(矩阵1,n );
创建(矩阵2,n );
输入(矩阵1,n );
if (inverse (矩阵1,矩阵2,n ) )
输出(矩阵2,n );
else
cout 'No inverse matrix' endl;
estroy (矩阵1,n );
estroy (矩阵2,n );
}
返回0;
}