三元组 稀疏矩阵 找错
以下是一个用三元数表示稀疏矩阵,并用三元组对二个稀疏矩阵进行相加的程序,用三元组存储和输出都有问题,顺便看下相加的程序是否有问题。。。谢谢大侠们!程序代码:
#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 i, j,r,c; cout<<"Please enter the value of Row and Col"<<endl; cin>>r>>c; temp->m=r; temp->n=c; temp->t=0; for(i=0;i<r;i++) { for (j=0;j<c;j++) { cin>>A[i][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; } } } int main() { int a[M][N]; int b[M][N]; Tripletable *A,*B,*C; CreatMat(A,a); CreatMat(B,b); AddTriTuple(A,B,C); ouputTripleTable(C); }输入第二个三元组数据这里有点问题
[ 本帖最后由 liucs116 于 2010-11-27 15:20 编辑 ]