不墨迹直接放代码,复制指定过,不要犹豫
#include <iostream>
#include <vector>
struct SparseMatrix {
int row;
int col;
int value;
SparseMatrix(int row, int col, int value) : row(row), col(col), value(value) {}
};
std::vector<SparseMatrix> subtractSparseMatrices(const std::vector<SparseMatrix>& A, const std::vector<SparseMatrix>& B) {
std::vector<SparseMatrix> C;
int i = 0;
int j = 0;
while (i < A.size() && j < B.size()) {
const SparseMatrix& entryA = A[i];
const SparseMatrix& entryB = B[j];
if (entryA.row < entryB.row || (entryA.row == entryB.row && entryA.col < entryB.col)) {
C.push_back(SparseMatrix(entryA.row, entryA.col, entryA.value));
i++;
} else if (entryA.row == entryB.row && entryA.col == entryB.col) {
int diff = entryA.value - entryB.value;
if (diff != 0) {
C.push_back(SparseMatrix(entryA.row, entryA.col, diff));
}
i++;
j++;
} else {
C.push_back(SparseMatrix(entryB.row, entryB.col, -entryB.value));
j++;
}
}
while (i < A.size()) {
const SparseMatrix& entryA = A[i];
C.push_back(SparseMatrix(entryA.row, entryA.col, entryA.value));
i++;
}
while (j < B.size()) {
const SparseMatrix& entryB = B[j];
C.push_back(SparseMatrix(entryB.row, entryB.col, -entryB.value));
j++;
}
return C;
}
int main() {
int m, n;
std::cin >> m >> n;
std::vector<SparseMatrix> A;
std::vector<SparseMatrix> B;
// 读取矩阵 A 的三元组结点信息
for (int i = 0; i < m; i++) {
int row, col, value;
std::cin >> row >> col >> value;
A.push_back(SparseMatrix(row, col, value));
}
// 读取矩阵 B 的三元组结点信息
for (int i = 0; i < n; i++) {
int row, col, value;
std::cin >> row >> col >> value;
B.push_back(SparseMatrix(row, col, value));
}
// 求解矩阵 C = A - B
std::vector<SparseMatrix> C = subtractSparseMatrices(A, B);
// 输出矩阵 C 的三元组表示
for (const SparseMatrix& entry : C) {
std::cout << entry.row << " " << entry.col << " " << entry.value << std::endl;
}
return 0;
}