三元组 稀疏矩阵 找错
以下是一个用三元数表示稀疏矩阵,并用三元组对二个稀疏矩阵进行相加的程序,输入出现了问题,顺便看下相加的程序是否有问题。。。谢谢大侠们!
程序代码:#include<iostream>
using namespace std;
#define MaxSize 100 //用户自定义
#define M 100
#define N 100
typedef int ElemType; //用户自定义
typedef struct
{
//定义三元组
int i;
int j;
ElemType value;
} TripleNode;
typedef struct
{
//定义三元组表
int m;
int n;
int t;
TripleNode data[MaxSize]; //矩阵行,列及三元组表长度
} Tripletable;
//输入矩阵三元组并且存储
void CreatMat(Tripletable *temp,ElemType A[M][N],int r,int c)
{
int i, j;
temp->m=r;
temp->n=c;
temp->t=0;
for(i=0;i<r;i++)
{
for (j=0;j<c;j++)
{
if (A[i][j] != 0 ) /*只存储非零元素*/
{
temp->data[temp->t].i=i;
temp->data[temp->t].j=j;
temp->data[temp->t].value=A[i][j];
temp->t++;
}
}
}
}
//矩阵相加算法
void AddTriTuple(Tripletable *A,Tripletable *B,Tripletable *C)
{
//三元组表表示的稀疏矩阵A,B相加
int k,l;
ElemType temp;
C->m=A->m;//矩阵行数
C->n=A->n;//矩阵列数
C->t=0; //三元组表长度
k=0;
l=0;
while(k<A->t&&l<B->t)
{
if((A->data[k].i==B->data[l].i)&&(A->data[k].j==B->data[l].j))
{
temp=A->data[k].value+B->data[l].value;
if(!temp)//相加不为零,加入C
{
C->data[C->t].i=A->data[k].i;
C->data[C->t].j=A->data[k].j;
C->data[C->t++].value=temp;
}
k++;
l++;
}
if (((A->data[k].i==B->data[l].i)&&(A->data[k].j<B->data[l].j))
|| (A->data[k].i<B->data[l].i))//将A中三元组加入C
{
C->data[C->t].i=A->data[k].i;
C->data[C->t].j=A->data[k].j;
C->data[C->t++].value=A->data[k].value;
k++;
}
if( ((A->data[k].i==B->data[l].i)&&(A->data[k].j>B->data[l].j))
||(A->data[k].i>B->data[l].i))//将B中三元组加入C
{
C->data[C->t].i=B->data[l].i;
C->data[C->t].j=B->data[l].j;
C->data[C->t++].value=B->data[l].value;
l++;
}
}
while (k<A->t)//将A中剩余三元组加入C
{
C->data[C->t].i=A->data[k].i;
C->data[C->t].j=A->data[k].j;
C->data[C->t++].value=A->data[k].value;
k++;
}
while(l<B->t)//将B中剩余三元组加入C
{
C->data[C->t].i=B->data[l].i;
C->data[C->t].j=B->data[l].j;
C->data[C->t++].value=B->data[l].value;
l++;
}
}
void ouputTripleTable(Tripletable *C)
{
int i,j;
int k=0;
for(i=0;i<C->m;i++)
{
for(j=0;j<C->n;j++)
{
if(i==C->data[k].i && j==C->data[k].j)
cout<<C->data[k++].value;
else
cout<<"0";
if(j<C->n-1)
cout<<" ";
else
cout<<endl;
}
}
}
void inputArray(ElemType A[M][N],int r,int c)
{
int i,j;
cout<<"Please enter the value of ROW and COL"<<endl;
cin>>r>>c;
for(i=0;i<r;i++)
for(j=0;j<c;j++)
cin>>A[i][j];
}
int main()
{
ElemType a[M][N];
ElemType b[M][N];
int Ra,Rb,Ca,Cb;
Tripletable *A,*B,*C;
inputArray(a,Ra,Ca);
CreatMat(A,a,Ra,Ca);
inputArray(b,Rb,Cb);
CreatMat(B,b,Rb,Cb);
AddTriTuple(A,B,C);
ouputTripleTable(A);
}
输入的时候就出现问题了,谁帮忙看看






