注意是关系矩阵乘法,不是矩阵乘法
代码直接放上
重载了两个运算符,不是装逼,只是想练练手。。。
#include <iostream>
using namespace std;
class Matrix
{
public:
Matrix(int n);
void iniMatrix();
~Matrix();
friend ostream & operator<< (ostream & os, const Matrix& R1);
Matrix operator *(const Matrix& R)const;
private:
int num;
bool** R;
};
Matrix::Matrix(int n)
{
num = n;
R = new bool*[n];
for (int i = 0; i < n; i++)
{
R[i] = new bool[n];
}
}
void Matrix:: iniMatrix()
{
int n = num;
for (int i = 0; i < n; i++)
{
R[i] = new bool[n];
}
for (int i = 0; i < n; i++)
{
cout << "输入第" << i+1 << "行的" << n << "个关系值" << endl;
for (int k = 0; k < n; k++)
{
int m = 0;
cin >> m;
R[i][k] = m;
}
}
}
Matrix Matrix::operator*(const Matrix& R2)const
{
int re = 0;
int n = R2.num;
Matrix R3(n);
for (int i = 0; i<n; i++)
{
for (int k = 0; k < n; k++)
{
for (int a = 0; a < n; a++)
{
int re =+ R[i][a] * R2.R[a][k];
if (re == 1)
{
R3.R[i][k] = re;
break;
}
R3.R[i][k] = re;
}
}
}
return R3;
}
Matrix::~Matrix()
{
cout << "矩阵已被删除" << endl;
}
ostream& operator<<(ostream& os, const Matrix& R1)
{
for (int i = 0; i < R1.num; i++)
{
for (int k = 0; k < R1.num; k++)
{
os << R1.R[i][k] << " ";
}
os << endl;
}
return os;
}
int main()
{
cout << "输入第一个N*N关系矩阵的大小N" << endl;
int n = 0;
cin >> n;
Matrix R1(n);
R1.iniMatrix();
cout << "第一个关系矩阵如下" << endl;
cout << R1 << endl;
cout << "输入第二个N*N关系矩阵" << endl;
Matrix R2(n);
R2.iniMatrix();
cout << "第二个关系矩阵如下" << endl;
cout << R2 << endl;
cout << "运算结果如下";
cout << R1 * R2;
return 0;
}