Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <assert.h>
- #define NMAX 1000
- typedef struct {
- int rows, cols, len;
- int row[NMAX], col[NMAX];
- double val[NMAX];
- } RareMatrix;
- static void readRareMatrix(RareMatrix* m) {
- assert(scanf_s("%d%d%d", &m->rows, &m->cols, &m->len));
- for (int i = 0; i < m->len; i++) {
- assert(scanf_s("%d%d%lf", &m->row[i], &m->col[i], &m->val[i]));
- }
- }
- static void printRareMatrix(const RareMatrix* const rMat) {
- for (int i = 0; i < rMat->rows; i++) {
- for (int j = 0; j < rMat->cols; j++) {
- double val = .0;
- for (int k = 0; k < rMat->len; k++) {
- if (rMat->row[k] == i && rMat->col[k] == j) {
- val = rMat->val[k];
- break;
- }
- }
- printf("%lf ", val);
- }
- printf("\n");
- }
- }
- static void addRareMats(const RareMatrix* const rMat1, const RareMatrix* const rMat2, RareMatrix* rMat3) {
- rMat3->rows = rMat1->rows;
- rMat3->cols = rMat1->cols;
- rMat3->len = 0;
- for (int i = 0; i < rMat1->len; i++) {
- rMat3->row[rMat3->len] = rMat1->row[i];
- rMat3->col[rMat3->len] = rMat1->col[i];
- rMat3->val[rMat3->len] = rMat1->val[i];
- rMat3->len++;
- }
- for (int i = 0; i < rMat2->len; i++) {
- int j;
- for (j = 0; j < rMat3->len; j++) {
- if (rMat3->row[j] == rMat2->row[i] && rMat3->col[j] == rMat2->col[i]) {
- rMat3->val[j] += rMat2->val[i];
- break;
- }
- }
- if (j == rMat3->len) {
- rMat3->row[rMat3->len] = rMat2->row[i];
- rMat3->col[rMat3->len] = rMat2->col[i];
- rMat3->val[rMat3->len] = rMat2->val[i];
- rMat3->len++;
- }
- }
- }
- int main() {
- RareMatrix rMat1, rMat2, rMat3;
- readRareMatrix(&rMat1);
- readRareMatrix(&rMat2);
- addRareMats(&rMat1, &rMat2, &rMat3);
- printRareMatrix(&rMat3);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement