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();
}