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