输入:一个关系的关系矩阵(键盘输入或从文件读入) 输出:此关系的自反闭包、对称闭包和传递闭包所对应的关系矩阵。 以c++语言写一个代码
时间: 2023-10-28 12:12:37 浏览: 69
好的,下面是一个 C++ 代码示例,用于计算一个关系的自反闭包、对称闭包和传递闭包所对应的关系矩阵:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
// 读入关系矩阵
ifstream fin("relation.txt");
int n;
fin >> n;
vector<vector<int>> R(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
fin >> R[i][j];
}
}
fin.close();
// 自反闭包
for (int i = 0; i < n; i++) {
R[i][i] = 1;
}
// 对称闭包
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
if (R[i][j] == 1) {
R[j][i] = 1;
}
if (R[j][i] == 1) {
R[i][j] = 1;
}
}
}
// 传递闭包
vector<vector<int>> D = R;
while (true) {
vector<vector<int>> D_new = D;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
if (D[i][k] == 1 && D[k][j] == 1) {
D_new[i][j] = 1;
break;
}
}
if (D_new[i][j] != D[i][j]) {
break;
}
}
if (D_new[i][n-1] != D[i][n-1]) {
break;
}
}
if (D_new == D) {
break;
}
D = D_new;
}
R = D;
// 输出结果
cout << "自反闭包:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << R[i][j] << " ";
}
cout << endl;
}
cout << "对称闭包:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << R[i][j] << " ";
}
cout << endl;
}
cout << "传递闭包:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << R[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
其中,我们假设关系矩阵保存在一个名为 `relation.txt` 的文件中,其第一行为矩阵的大小 $n$,接下来 $n$ 行为矩阵的元素。在实际使用时,你需要将其替换为你自己的关系矩阵。
希望这个代码示例能够帮助你解决问题。如果你还有其他问题,欢迎随时向我提出。