描述
给定2 个n×n矩阵a 和b,试设计一个判定a 和b 是否互逆的蒙特卡罗算法,算法的计算时间应为O(n2)。设计一个蒙特卡罗算法,对于给定的矩阵a和b,判定其是否互逆。
输入
输入的第一行有1个正整数n,表示矩阵a和b 为n×n矩阵。接下来的2n行,每行有n个实数,分别表示矩阵a和b 中的元素。
输出
矩阵a 和b 互逆则输出YES,否则输出NO。
样例输入
3
1 2 3
2 2 3
3 3 3
-1 1 0
1 -2 1
0 1 -0.666667
样例输出
YES
#include<stdio.h>
#include<math.h>
#define N 20
int main()
{
//freopen("a.txt","r",stdin);
float a[N][N],b[N][N],c[N][N]={0};
int n,i,j,k,f;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&b[i][j]);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
c[i][j]+=a[i][k]*b[k][j];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
f=1;
if(i!=j)
{
if(fabs(c[i][j])<=0.00001) f=0;
}
else
{
if(fabs(c[i][j]-1)<=0.00001) f=0;
}
}
}
if(f==1) printf("NO\n");
else printf("YES\n");
return 0;
}