数据结构实验课-矩阵加减和转置

矩阵加减和转置

#include<bits/stdc++.h>
using namespace std;
struct tri{
    int data,x,y;
};
struct matrix{
    int n,m;
    int length;
    tri a[100];

    matrix(int nn,int mm,int length)
    {
        this->length=length;
        this->n=nn;
        this->m=mm;
    }

    matrix operator + (const matrix &x)
    {
        matrix temp(x.n,x.m,0);
        int len=0;
        bool fa[100];
        bool fb[100];
        memset(fa,true,sizeof(fa));
        memset(fb,true,sizeof(fb));
        for(int i=0;i<length;i++)
        {
            int flag=false;
            for(int j=0;j<x.length;j++)
                if(a[i].x==x.a[j].x&&a[j].y==x.a[j].y)
                {
                    fa[i]=false;
                    fb[i]=false;
                    temp.a[len].data=a[i].data+x.a[j].data;
                    temp.a[len].x=a[i].x;
                    temp.a[len++].y=a[i].y;
                    break;
                }
        }
        for(int i=0;i<length;i++)
            if(fa[i]){
                temp.a[len].data=a[i].data;
                temp.a[len].x=a[i].x;
                temp.a[len++].y=a[i].y;
            }
        for(int i=0;i<x.length;i++)
            if(fb[i]){
                temp.a[len].data=x.a[i].data;
                temp.a[len].x=x.a[i].x;
                temp.a[len++].y=x.a[i].y;
            }
        temp.length=len;
        return temp;
    }

    void print()
    {
        int b[50][50]={0};
        for(int i=0;i<length;i++)
        {
            int x=a[i].x;
            int y=a[i].y;
            int z=a[i].data;
            b[x][y]=z;
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cout<<b[i][j]<<" "; 
            }
            cout<<endl;
        }
    }

    matrix zhuanzhi()
    {
        for(int i=0;i<length;i++)
        {
            int x=a[i].x;
            int y=a[i].y;
            a[i].x=y;
            a[i].y=x;
        }
        return *this;
    }

};
int main()
{
    int n,m;
    int lenA,lenB;
    cout<<"输入矩阵的长宽:"; 
    cin>>n>>m;

    cout<<"输入矩阵A的有效数据长度:";
    cin>>lenA;
    matrix A(n,m,lenA);
    for(int i=0;i<lenA;i++)
    {
        cin>>A.a[i].data>>A.a[i].x>>A.a[i].y;
    }

    cout<<"输入矩阵B的有效数据长度:";
    cin>>lenB;
    matrix B(n,m,lenB);
    for(int i=0;i<lenB;i++)
    {
        cin>>B.a[i].data>>B.a[i].x>>B.a[i].y;
    }

    cout<<endl;
    cout<<"A矩阵长这样:\n"; 
    A.print();
    cout<<endl;

    cout<<"B矩阵长这样:\n"; 
    B.print();
    cout<<endl;

    cout<<"A+B矩阵长这样:\n";
    (A+B).print();
    cout<<endl;

    cout<<"A+B矩阵转置长这样:\n";
    (A+B).zhuanzhi().print();

    return 0;
}

您可能还喜欢...

发表评论

电子邮件地址不会被公开。 必填项已用*标注