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 }