当前位置:文档之家› 数据结构 矩阵的相乘

数据结构 矩阵的相乘

void print(TSMatrix A)
{
int k=0,i,j;
int M[MAXSIZE][MAXSIZE];
for (i=0;i<A.m;i++)
{
for(j=0;j<A.n;j++)
M[i][j]=0;
}
while(k<A.len)
{
M[A.data[k].row-1][A.data[k].col-1]=A.data[k].e;
cin>>A.data[i].e;
}
}
int search(TSMatrix A,int m,int n)
//找到m行n列元素在A的三元组表中的位置。若找到返回值,若找不到返回-1
{
int flag=-1;
for(int i=0;i<MAXSIZE;i++)
{
if(A.data[i].row==m&&A.data[i].col==n)//找到了第m行第n列的元素的位置
{
for(j=0;j<B.len;j++)
{
if(A.data[i].col==B.data[j].row)//此条件保证俩矩阵的非0元相乘后!=0
{
int flag=search(C, A.data[i].row, B.data[j].col) ;
//调用搜索函数找到row行和col列在c的顺序表中的位置
{
flag=i;//将此元素位置值赋给flag
break;
}
}
return flag;
}
void mult(TSMatrix A,TSMatrix B,TSMatrix &C)//矩阵相乘函数
{
int i=0;
int j=0;
if (A.n==B.m)
{
C.m=A.m;
C.n=B.n;
for(i=0;i<A.len;i++)
}//end_if(A.data[i].col==B.data[j].row)
}//end_for(j=0;j<B.len;j++)
}//end_for(i=0;i<A.len;i++)
}//end_if (A.n==B.m)
else
cout<<"矩阵不能相乘!"<<endl;
}//end_mult
}//end_else
showtip();
break;
}
case 2:{
exit(0);
break;
}
}//end_switch
}//end_while
}//end_main
cout<<endl;
cout<<" 0-----found matrix"<<endl;
cout<<" 1-----A * B"<<endl;
cout<<" 2----- exit"<<endl;
cout<<"------------------------------------------------------------"<<endl;
{Байду номын сангаас
Triple data[MAXSIZE];//非0元三元组表
int m,n,len;//矩阵的行数,列数和非0元个数
}TSMatrix;
void initMatrix(TSMatrix &A)//矩阵初始化函数,参数类型为矩阵
{
A.len=0;
A.m=0;
A.n=0;
for (int i=0; i<MAXSIZE;i++)
{
A.data[i].col=0;
A.data[i].e=0;
A.data[i].row=0;
}
}
void createMatrix(TSMatrix &A)//创建矩阵函数,创建三元组顺序表表示的矩阵
{
initMatrix(A);
cout<<"创建矩阵:";
cout<<"请输入矩阵的行、列值及非0元的个数:\n";
cin>>A.m>>A.n>>A.len;//输入矩阵的行、列值及非0元的个数
for(int i=0;i<A.len;i++)//循环输入非0元的值
{
cout<<"请输入第:" <<i+1 <<"非0元素对应的行、列、值:\n";
cin>>A.data[i].row;
cin>>A.data[i].col;
}
void main()
{
TSMatrix A,B,C;
initMatrix(A);
initMatrix(B);
initMatrix(C);
showtip();
int i;
cin>>i;
while(true)
{
int i;
cin>>i;
switch(i)
{
case 0:{
system("cls");
if(flag==-1)
{
C.data[C.len].col=B.data[j].col;
C.data[C.len].row=A.data[i].row;
C.data[C.len++].e=B.data[j].e*A.data[i].e;
}//end_if(flag==-1)
else
C.data[flag].e=C.data[flag].e+A.data[i].e*B.data[j].e;
cout<<"创建矩阵A:"<<endl;
createMatrix(A);//调用创建函数
cout<<"创建矩阵B:"<<endl;
createMatrix(B);
showtip();//调用菜单函数
break;
}
case 1:{
system("cls");
if(A.m==0||B.m==0)
cout<<"未创建矩阵"<<endl;
# include <iostream>
# define MAXSIZE 20
using namespace std;
typedef struct//三元组的定义
{
int row;//非0元的行下标
int col;//非0元的列下标
int e;//非0元的素值
}Triple;
typedef struct//矩阵的定义
k++;
}
for(i=0;i<A.m;i++)//以列表形式输出矩阵
{
cout<<"| ";//控制打印格式
for(j=0;j<A.n;j++)
cout<<M[i][j]<<" ";
cout<<"|"<<endl;
}
}
void showtip()
{
cout<<"----------------------please choose the case--------------------"<<endl;
else
{
initMatrix(C);//调用矩阵初始化函数
mult(A,B,C);//调用矩阵相称函数
if(A.n==B.m)
{
cout<<"乘后的结果:"<<endl;
print(A);
cout<<"*"<<endl;
print(B);
cout<<"="<<endl;
print(C);
}//end_if(A.n==B.m)
相关主题