PTA (数据结构) 三元组顺序表表示的稀疏矩阵加法

        这题用的方法有点傻,时间复杂度没算(但肯定挺高的,嘿嘿~),但应付pta上的数据测试肯定是够了,而且好理解,因为查网上的答案都挺长的,所以自己也发一个吧,需要的小伙伴自取就行了~。

        大致思路就是先在M中找和N位置相同的点,然后相加(特殊情况为相加后为零),最后再把N中的多余的点加到M中去。

​
#include<bits/stdc++.h>
using namespace std;
typedef struct poin
{
    int i,j;
    int elem;
}point;
typedef struct three{
    point*data=new point[10000];
    int mu,nu,tu;
}sna ;

int main(){
    sna M,N;
    cin>>M.mu>>M.nu>>M.tu>>N.tu;
    N.mu=M.mu;N.nu=M.nu;
    for(int i=0;i<M.tu;i++){
        cin>>M.data[i].i>>M.data[i].j>>M.data[i].elem;
    }
    for(int i=0;i<N.tu;i++){
        cin>>N.data[i].i>>N.data[i].j>>N.data[i].elem;
    }
    for(int i=0;i<M.tu;i++){
        for(int j=0;j<N.tu;j++){
            if(N.data[j].i==M.data[i].i && N.data[j].j==M.data[i].j){
                M.data[i].elem+=N.data[j].elem;
                N.data[j].elem=0;
                if(M.data[i].elem==0){
                    for(int temp=i;temp<M.tu;temp++){
                        M.data[i]=M.data[i+1];
                    }
                    M.tu--;
                }
            }
        }
    }
    for(int i=0;i<N.tu;i++){
        if(N.data[i].elem!=0){
            M.data[M.tu++]=N.data[i];
        }
    }
    cout<<M.mu<<" "<<M.nu<<" "<<M.tu<<'\n';
    for(int i=0;i<M.tu;i++){
        cout<<M.data[i].i<<" "<<M.data[i].j<<" "<<M.data[i].elem<<'\n';
    }

}

​

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值