#include <iostream.h>
struct RCV
{
int row,col;
int value;
};
class SMatrix
{
public:
SMatrix(){item=NULL;num=0;};
SMatrix(RCV a[],int co,int ro,int n); //co行 ro 列
~SMatrix(){}; //delete [] item 写进去回出错???
int get(int i,int j);
friend void cheng(SMatrix&x,SMatrix a,SMatrix b);
void print();
private:
RCV *item;
int r,c,num;
};
SMatrix::SMatrix(RCV a[],int co,int ro,int n)
{
int i;
r=ro;c=co;num=n;
item=new RCV[num];
for(i=1;i<=num;i++)
item[i]=a[i];
};
int SMatrix::get(int i,int j)
{
for(int a=1;a<=num;a++)
{if(item[a].col==i&&item[a].row==j)
return item[a].value;
}
return 0;
}
void cheng(SMatrix&x,SMatrix a,SMatrix b)
{
if(a.r==b.r)
{
int i,j,q,y,p;
int z=0;
x.c=b.r ;x.r=a.c ;x.num=a.num;
if(x.item != NULL){delete []x.item;}
x.item=new RCV[10];
for(i=0;i<10;i++)
{
x.item[i].col=0;
x.item[i].row=0;
x.item[i].value=0;
}
for(i=1;i<=a.c;i++)
{y=0;p=0;
for(j=1;j<=b.r;j++)
{
y=0;p=0;
for(q=1;q<=a.r;q++)
{ y=0;
y=a.get(i,q)*b.get(q,j);
p+=y;
}
if(p!=0)
{
z++;
x.item[z].col=i;
x.item[z].row=j;
x.item[z].value=p;
}
}
} x.print();
}
else cout<<"矩阵不能相乘";
}
void SMatrix::print()
{
int i,j;
cout<<"-----------------------------"<<endl;
for(i=1;i<=c;i++)
{for(j=1;j<=r;j++)
{cout<<get(i,j)<<" ";}
cout<<endl;}
cout<<"-----------------------------"<<endl;
}
int main()
{
RCV j[100];
int h,l,n;
cout<<"请输入矩阵的大小 行,列"<<endl;
cin>>h>>l;
cout<<"你要输入多少个元素?"<<endl;
cin>>n;
for(int i=1;i<=n;i++)
{cout<<"请输入第"<<i<<"元素所在的行,所在的列,元素的值"<<endl;
cin>>j[i].col>>j[i].row>>j[i].value;}
SMatrix M(j,h,l,n);
SMatrix A=M;
A.print();
RCV d[100];
h=l=n=0;
cout<<"请输入矩阵的大小 行,列"<<endl;
cin>>h>>l;
cout<<"你要输入多少个元素?"<<endl;
cin>>n;
for(int q=1;q<=n;q++)
{cout<<"请输入第"<<q<<"元素所在的行,所在的列,元素的值"<<endl;
cin>>d[q].col>>d[q].row>>d[q].value;}
SMatrix N(d,h,l,n);
SMatrix B=N;
B.print();
SMatrix C;
cheng(C,M,N);
}