我肯定写的是最容易理解的那种撒
#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; }
