1 #include<stdio.h>
 2 typedef struct{
 3     int vex[50];
 4     int matrix[50][50];
 5     int m,n,length;
 6 }AZ;
 7 void Create(AZ*A)
 8 {
 9     int e,t=0;
10     scanf("%d %d",&A->m,&A->n);
11     for(int i=0;i<A->m;i++)
12     for(int j=0;j<A->n;j++)
13     {
14         scanf("%d",&e);
15         if(e)
16         {
17         A->vex[t++]=e;
18         A->matrix[i][j]=1;    
19         }
20         else A->matrix[i][j]=0;
21     }
22     A->length=t;
23 }
24 void Ins(AZ*T,int index,int e)
25 {
26     int i;
27     for(i=T->length;i>index;i--)T->vex[i]=T->vex[i-1];
28     T->vex[i]=e;
29     T->length++;
30 }
31 void Delete(AZ*T,int index)
32 {
33     for(int i=index;i<T->length-1;i++)
34     T->vex[i]=T->vex[i+1];
35     T->length--;
36 }
37 void AZAdd(AZ*A,AZ*B)
38 {
39     int a=0,b=0,e; 
40     for(int i=0;i<A->m;i++)
41     for(int j=0;j<A->n;j++)
42     {
43         if(A->matrix[i][j]&&B->matrix[i][j])
44         {
45             e=A->vex[a]+B->vex[b];
46             if(e)
47             {
48                 A->vex[a]=e;
49                 a++,b++;
50             }
51             else
52             {
53                 A->matrix[i][j]=0;
54                 AZ*T=A;
55                 Delete(T,a);
56                 b++;
57             }
58         }
59         else if(B->matrix[i][j])
60         {
61             A->matrix[i][j]=1;
62             AZ*T=A;
63             Ins(T,a,B->vex[b]);
64             a++,b++;//不要漏掉a++ 
65         }
66         else if(A->matrix[i][j])a++;
67     }
68 }
69 void Order(AZ*A)
70 {
71     int t=0;
72     for(int i=0;i<A->m;i++)
73     for(int j=0;j<A->n;j++)
74     {
75         if(A->matrix[i][j])
76         printf("第%d行第%d列%d\n",i,j,A->vex[t++]);
77     }
78 }
79 int main()
80 {
81     AZ A,B;
82     Create(&A);
83     Create(&B);
84     AZAdd(&A,&B);
85     Order(&A);
86     return 0;
87     
88 }