这个矩阵相加的程序,怎么运行时总是不输出Q矩阵呢,急死我了
#include <iostream>#define MAXSIZE 12500
#define OK 1
#define ERROR 0
using namespace std;
typedef int ElemType;
typedef struct{
int i,j; //矩阵的行下标及列下标
ElemType e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1]; //三元组表
int mu,nu,tu; //矩阵的行数列数及非零元个数
}TSMatrix;
int CreateSMatrix(TSMatrix &M) //创建矩阵
{
cout<<"请输入稀疏矩阵的行数、列数和非零元个数:"<<endl;
cin>>M.mu>>M.nu>>M.tu;
if((M.mu<=0)||(M.nu<=0)||(M.tu<=0)||(M.tu>M.mu*M.nu)) //判断行值、列值、元素个数是否合法
return ERROR;
for(int i=1;i<=M.tu;i++)
{
cout<<"请输入元素坐标及数值:"<<endl;
cin>>M.data[i].i>>M.data[i].j>>M.data[i].e;
if((M.data[i].i<=0)||(M.data[i].j<=0)) //控制行、列符合要求
{
cout<<"输入错误,请重新输入"<<endl;
cin>>M.data[i].i>>M.data[i].j>>M.data[i].e;
}
}
return OK;
}
int DisplaySMatrix(TSMatrix &M) //输出矩阵
{
int n=1;
while(n<=M.tu)
{
for(int i=1;i<=M.mu;i++)
{
for(int j=1;j<=M.nu;j++)
{
if(M.data[n].i==i&&M.data[n].j==j)
{
cout<<M.data[n].e<<" ";
n++;
}
else
{
cout<<"0"<<" ";
}
}
cout<<endl;
}
cout<<endl;
return OK;
}
return OK;
}
int AddSMatrix(TSMatrix &M,TSMatrix &N,TSMatrix &Q)//矩阵相加
{
int i=1,j=1,k=1;
Q.data[k].i=M.data[i].i;
Q.data[k].j=M.data[i].j;
while(i<M.tu&&j<N.tu)
{
if(M.data[i].i==N.data[i].i&&M.data[j].j==N.data[j].j)
{
Q.data[k]=M.data[i];
Q.data[k].e+=N.data[j].e;
i++;
j++;
if(Q.data[k].e!=0)k++;
return OK;
}
else
{
if(M.data[i].i<N.data[i].i||(N.data[i].i==M.data[i].i&&M.data[j].j<N.data[j].j))
{
Q.data[k]=M.data[i];
i++;
k++;
return OK;
}
else
{
Q.data[k]=N.data[j];
j++;
k++;
return OK;
}
}
}
while(i<M.tu)
{
Q.data[k]=M.data[i];
j++;
k++;
}
while(j<N.tu)
{
Q.data[k]=N.data[j];
i++;
k++;
}
Q.tu=k;
return OK;
}
int main()
{
TSMatrix M,N,Q;
CreateSMatrix(M);
cout<<"矩阵M:"<<endl;
DisplaySMatrix(M);
CreateSMatrix(N);
cout<<"矩阵N:"<<endl;
DisplaySMatrix(N);
cout<<"矩阵M+N:"<<endl;
AddSMatrix( M, N, Q);
DisplaySMatrix(Q);
return OK;
}