#include #include #include #include #include using namespace std; const int maxn = 1005; typedef struct node { int col,row,val; //分别代表非零元素的 列,行,值 }Triple; typedef struct { int m,n,t; //矩阵的行数,列数和非零元个数 int rpos[maxn]; //行元素个数前缀和数组 Triple list[maxn]; //三元组 }Matrix; void Minput(Matrix &A) { int i,j,k; scanf("%d %d",&A.m,&A.n); while(1) { scanf("%d %d %d",&i,&j,&k); if(i==0 && j==0 && k==0) break; A.t++; A.list[A.t].row = i; A.list[A.t].col = j; A.list[A.t].val = k; A.rpos[i]++; } for(int i=1;i<=A.m;i++) A.rpos[i]+=A.rpos[i-1]; for(int i=A.m;i>=1;i--) A.rpos[i] = A.rpos[i-1] + 1; } void Multi(Matrix A,Matrix B,Matrix &C) { C.m = A.m, C.n = B.n , C.t = 0; int temp[maxn]; //行元素存储 int Ar,Br,ptr; if(A.t * B.t !=0) { for(int i=1;i<=A.m;i++) { for(int j=1;j<=A.n;j++) temp[j] = 0; C.rpos[i] = C.t + 1; if(i < A.m) Ar = A.rpos[i+1]; else Ar = A.t +1; for(int p=A.rpos[i];p