Skip to content

E18161: 矩阵运算

matrices, http://cs101.openjudge.cn/pctbook/E18161/

请使用@矩阵相乘运算符。

思路:按定义写即可。

cpp
#include <iostream>
#include <map>
#include <vector>
#include <sstream>
using namespace std;


class marix
{
    private:
        int index = 0;//用来表征能否进行运算

    public:
        int row, col;
        vector<vector<int>> mar;

        void getMarix()
        {
            cin>> row >> col;
            mar.resize(row, vector<int>(col, 0));
            for(int i = 0; i < row; i++)
            {
                for(int j = 0; j < col; j++)
                {
                    cin >> mar[i][j];
                }
            }
            index = 0;
        }

        marix operator+(const marix m)
        {
            if(row != m.row || col != m.col|| index == 1)
            {   
                index = 1;
                return *this;
            }
            marix res;
            res.row = row;
            res.col = col;
            res.mar.resize(row, vector<int>(col, 0));
            for(int i = 0; i < row; i++)
            {
                for(int j = 0; j < col; j++)
                {
                    res.mar[i][j] = mar[i][j] + m.mar[i][j];
                }
            }
            return res;
        }

        marix operator*(const marix m)
        {
            if(col != m.row || index == 1)
            {
                index = 1;
                return *this;
            }
            marix res;
            res.row = row;
            res.col = m.col;
            res.mar.resize(row, vector<int>(m.col, 0));
            for(int i = 0; i < row; i++)
            {
                for(int j = 0; j < m.col; j++)
                {
                    for (int k = 0; k < col; k++)
                    {
                        res.mar[i][j] += mar[i][k] * m.mar[k][j];
                    }
                }
            }
            return res;
        }

        void printMarix()
        {
            if(index == 1)
                cout << "Error!" ;
            else
            {
                for(int i = 0; i < row; i++)
                {
                    if (i) cout << endl;
                    for(int j = 0; j < col; j++)
                    {
                        if (j) cout << " ";
                        cout << mar[i][j] ;
                    } 
                }
            }
        }

};


int main() 
{
    marix A, B, C, D;
    A.getMarix();
    B.getMarix();
    C.getMarix();
    D= A * B + C;
    D.printMarix();
}