矩阵加法sss


#include "tsmatrix.h"
#include <stdio.h>
#include <stdlib.h>
 
bool add_matrix(const TSMatrix* pM, const TSMatrix* pN, TSMatrix* pQ)
{
 
    int i_M, j_M, i_N, j_N, M, N, Q;
 
    pQ->m = pM->m;
    pQ->n = pM->n;
 
    if (pM->m != pN->m || pM->n != pN->n) {
        return false;
    }
 
    for (M = 0, N = 0, Q = 0; M < pM->len && N < pN->len;) {
 
        i_M = pM->data[M].i; 
        i_N = pN->data[N].i; 
        j_M = pM->data[M].j; 
        j_N = pN->data[N].j; 
 
        if (i_M > i_N) 
        {
            pQ->data[Q].i = pN->data[N].i;
            pQ->data[Q].j = pN->data[N].j;
            pQ->data[Q].e = pN->data[N].e;
            N++; 
            Q++; 
        } else if (i_M < i_N) 
        {
            pQ->data[Q].i = pM->data[M].i;
            pQ->data[Q].j = pM->data[M].j;
            pQ->data[Q].e = pM->data[M].e;
            M++; 
            Q++; 
        } else 
        {
            
            if (j_M > j_N) 
            {
              
                pQ->data[Q].i = pN->data[N].i;
                pQ->data[Q].j = pN->data[N].j;
                pQ->data[Q].e = pN->data[N].e;
                N++; 
                Q++; 
            } else if (j_M < j_N) 
            {
              
                pQ->data[Q].i = pM->data[M].i;
                pQ->data[Q].j = pM->data[M].j;
                pQ->data[Q].e = pM->data[M].e;
                M++; 
                Q++; 
            } else 
            {
                
                if ((pM->data[M].e + pN->data[N].e)) 
                {
                    pQ->data[Q].i = pM->data[M].i;
                    pQ->data[Q].j = pM->data[M].j;
                    pQ->data[Q].e = pM->data[M].e + pN->data[N].e;
                    Q++;
                }
                
                M++;
                N++;
            }
        }
    }
 
    while (M < pM->len) 
    {
        
        pQ->data[Q].i = pM->data[M].i;
        pQ->data[Q].j = pM->data[M].j;
        pQ->data[Q].e = pM->data[M].e;
        M++;
        Q++;
    }
 
    while (N < pN->len) 
    {
       
        pQ->data[Q].i = pN->data[N].i;
        pQ->data[Q].j = pN->data[N].j;
        pQ->data[Q].e = pN->data[N].e;
        N++;
        Q++;
    }
    pQ->len = Q;
    return true;
}

解题思路 用一个大循环来跑 当两个三元组都没有跑完的时候 先比较行 行小的肯定排在前面(行比列优先级高 先走行) 如果相等在比较列 如果列也相等,则判断相加是否为零 不为零则加入输出的数组里面,之后如果两个数组有没有跑完的,就把剩下的接进去就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值