0
点赞
收藏
分享

微信扫一扫

矩阵加法sss

慕容冲_a4b8 2022-04-14 阅读 36
c语言


#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;
}

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

举报

相关推荐

0 条评论