稀疏矩阵的运算

内容

假设两个稀疏矩阵A和B,他们均为m行n列,要求表写求矩阵的加法即:C=A+B的算法(C矩阵存储A与B相加的结果)

分析

利用一维数组来存储,一维数组顺序存放非零元素的行号、列号和数值,行号-1表示结束,然后进行矩阵加法运算时依次扫描矩阵A和B的行列值,并以行优先。当行列相同的时候,将第三个元素的值相加和以及行列号三个元素存入结果数组C中;不相同时,将A或B的三个元素直接存入结果数组中。

代码

// fanchen.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>

using namespace std;

#define LINE 10

struct Node{
    //行号
    int row;
    //列号
    int line;
    //数据
    int data;
};

//初始化数组
int init(Node array[])
{
    int row,line,data;
    int index = 0;
    while(cin>>row){
        if(row == -1){
            break;
        }
        cin>>line>>data;
        array[index].data=data;
        array[index].line = line;
        array[index].row = row;
        index++;
    }
    return index;
}

//打印数组
void printArray(Node array[],int len)
{
    for(int i = 0;i < len;i++){
        cout<<array[i].row<<" "<<array[i].line<<" "<<array[i].data<<endl;
    }
}

int calc(Node a[],int lena,Node b[],int lenb,Node c[])
{
    //计数单位
    int index = 0;
    int i = 0,j = 0,k;
    while(i < lena && j < lenb){
        int tempa = a[i].row * 10 + a[i].line;
        int tempb = b[j].row * 10 + b[j].line;
        if(tempa < tempb){
            c[index++] = a[i++];
        }else if(tempa == tempb){
            int l = a[i].line;
            int r = a[i].row;
            int data = a[i].data + b[j].data;
            c[index].line = l;
            c[index].row = r;
            c[index].data = data;
            index++;
            i++;
            j++;
        }else{
            c[index++] = b[j++];
        }
    }
    while(i < lena){
        c[index++] = a[i++];
    }
    while(j < lenb){
        c[index++] = b[j++];
    }
    return index;
}

int _tmain(int argc, _TCHAR* argv[])
{

    Node a[60],b[60],c[60];
    //a的长度
    int lena = init(a);
    int lenb = init(b);
    int lenc = calc(a,lena,b,lenb,c);
    cout<<"a::::"<<endl;
    printArray(a,lena);
    cout<<endl;

    cout<<"b::::"<<endl;
    printArray(b,lenb);
    cout<<endl;

    printArray(c,lenc);
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_33466466/article/details/80093868