我肯定写的是最容易理解的那种撒
#include<bits/stdc++.h>
typedef int T;
using namespace std;
typedef struct
{
int x,y;
int val;
} triple;
typedef struct
{
triple data[1005];
int n,m,num;///非0个数
} matrix;
bool cmp(triple a,triple b)
{
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
bool cmp2(triple a,triple b)
{
if(a.y==b.y) return a.x<b.x;
return a.y<b.y;
}
int main()
{
///存储
matrix mx;
cin>>mx.n>>mx.m>>mx.num;
for(int i=1; i<=mx.num; i++)
{
cin>>mx.data[i].x>>mx.data[i].y>>mx.data[i].val;
}
// input(mx);
// printf("nhas");
matrix a;
cin>>a.n>>a.m>>a.num;
for(int i=1; i<=a.num; i++)
{
cin>>a.data[i].x>>a.data[i].y>>a.data[i].val;
}
cout<<"The transformed matrix is:"<<endl;
sort(mx.data+1,mx.data+1+mx.num,cmp2);
for(int i=1; i<=mx.num; i++)
{
cout<<mx.data[i].y<<" "<<mx.data[i].x<<" "<<mx.data[i].val<<endl;
}
cout<<"The added matrix is:"<<endl;
int add=0;
for(int i=1; i<=a.num; i++)
{
int f=0;
for(int j=1; j<=mx.num; j++)
{
if((a.data[i].x==mx.data[j].x)&&(a.data[i].y==mx.data[j].y))
{
f=1;
mx.data[j].val+=a.data[i].val;
}
}
if(f==0)
{
add++;
int kk=add+mx.num;
mx.data[kk].x=a.data[i].x;
mx.data[kk].y=a.data[i].y;
mx.data[kk].val=a.data[i].val;
}
}
mx.num+=add;
sort(mx.data+1,mx.data+1+mx.num,cmp);
for(int i=1;i<=mx.num;i++)
{
if(mx.data[i].val!=0)cout<<mx.data[i].x<<" "<<mx.data[i].y<<" "<<mx.data[i].val<<endl;
}
return 0;
}