
1 #include<stdio.h> 2 typedef struct{ 3 int row,col; 4 int data; 5 }Triple; 6 typedef struct{ 7 Triple element[200]; 8 int m,n,length; 9 }TSMatrix; 10 void Create(TSMatrix*T) 11 { 12 scanf("%d %d",&T->m,&T->n); 13 int e,t=0; 14 for(int i=0;i<T->m;i++) 15 for(int j=0;j<T->n;j++) 16 { 17 scanf("%d",&e); 18 if(e) 19 { 20 T->element[t].row=i; 21 T->element[t].col=j; 22 T->element[t].data=e; 23 t++; 24 } 25 } 26 T->length=t; 27 } 28 void Add(TSMatrix*A,TSMatrix*B,TSMatrix*C) 29 { 30 int a=0,b=0,c=0; 31 C->m=A->m; 32 C->n=A->n; 33 while(a<A->length&&b<B->length) 34 { 35 if(A->element[a].row<B->element[b].row) 36 C->element[c++]=A->element[a++]; 37 else if(A->element[a].row==B->element[b].row&&A->element[a].col<B->element[b].col) 38 C->element[c++]=A->element[a++]; 39 else if(A->element[a].row>B->element[b].row) 40 C->element[c++]=B->element[b++]; 41 else if(A->element[a].row==B->element[b].row&&A->element[a].col>B->element[b].col) 42 C->element[c++]=B->element[b++]; 43 else{ 44 if(A->element[a].data+B->element[b].data) 45 { 46 C->element[c]=B->element[b]; 47 C->element[c++].data=B->element[b++].data+A->element[a++].data; 48 } 49 } 50 } 51 while(a<A->length) 52 C->element[c++]=A->element[a++]; 53 while(b<B->length) 54 C->element[c++]=B->element[b++]; 55 C->length=c; 56 } 57 void Order(TSMatrix*C) 58 { 59 for(int i=0;i<C->length;i++) 60 printf("第%d行第%d列%d\n",C->element[i].row+1,C->element[i].col+1,C->element[i].data); 61 } 62 int main() 63 { 64 TSMatrix A,B,C; 65 Create(&A); 66 Create(&B); 67 Add(&A,&B,&C); 68 Order(&C); 69 return 0; 70 71 }