
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 int Compare(Triple a,Triple b)//0代表a低于b,1代表a高于b,2代表a与b同级 29 { 30 if(a.row<b.row)return 0; 31 else if(a.row==b.row&&a.col<b.col)return 0; 32 else if(a.row>b.row)return 1; 33 else if(a.row==b.row&&a.col>b.col)return 1; 34 else return 2; 35 } 36 void AddtoB(TSMatrix*A,TSMatrix*B) 37 { 38 int b=B->length-1; 39 int a=A->length-1; 40 int cnt; 41 int addnum=0; 42 int samenum=0; 43 while(b>=0&&a>=0) 44 { 45 while(Compare(A->element[a],B->element[b])==1)a--; 46 if(Compare(A->element[a],B->element[b])==2)samenum++; 47 b--; 48 } 49 addnum=A->length-samenum; 50 B->length+=addnum; 51 for(b=B->length-addnum-1,a=A->length-1;b>=0&&a>=0;b--) 52 { 53 cnt=0; 54 while(a>=0&&Compare(A->element[a],B->element[b]))cnt++,a--; 55 if(Compare(A->element[a+1],B->element[b])==2) 56 { 57 cnt--; 58 addnum-=cnt; 59 B->element[b].data+=A->element[a+1].data; 60 B->element[b+addnum]=B->element[b]; 61 for(int i=a+2,t=1;t<=cnt;i++,t++)B->element[b+addnum+t]=A->element[i]; 62 } 63 else 64 { 65 addnum-=cnt; 66 B->element[b+addnum]=B->element[b]; 67 for(int i=a+1,t=1;t<=cnt;i++,t++)B->element[b+addnum+t]=A->element[i]; 68 } 69 } 70 while(a>0) 71 B->element[b--]=A->element[a--]; 72 73 } 74 void Order(TSMatrix*C) 75 { 76 for(int i=0;i<C->length;i++) 77 printf("第%d行第%d列%d\n",C->element[i].row+1,C->element[i].col+1,C->element[i].data); 78 } 79 int main() 80 { 81 TSMatrix A,B; 82 Create(&A); 83 Create(&B); 84 AddtoB(&A,&B); 85 Order(&B); 86 return 0; 87 88 }