采用C++语言编写代码,要求输入:一个关系的关系矩阵(键盘输入或从文件读入)。 输出:此关系的自反闭包、对称闭包和传递闭包所对应的关系矩阵。
以下是代码:
```c++
#pragma once
#include <iostream>
#include <fstream>
using namespace std;
const int MAXN = 100;
int n; // 矩阵大小
int mat[MAXN][MAXN];
// 矩阵
// 计算自反闭包
void reflexive_closure()
{
for (int i = 0; i < n; i++)
{
mat[i][i] = 1;
}
}
// 计算对称闭包
void symmetric_closure()
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < i; j++)
{
if (mat[i][j] && !mat[j][i])
{
mat[j][i] = 1;
}
else if
(mat[j][i] && !mat[i][j])
{
mat[i][j] = 1;
}
}
}
}
// 计算传递闭包
void transitive_closure()
{
for (int k = 0; k < n; k++)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (mat[i][k] && mat[k][j])
{
mat[i][j] = 1;
}
}
}
}
}
// 输出矩阵
void print_matrix()
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << mat[i][j] << " ";
}
cout << endl;
}
}
```c++
#include"标头.h"
int main() {
// 从文件读入矩阵
ifstream fin("D:\\学习\\离散数学\\作业\\matrix.txt");
fin >> n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
fin >> mat[i][j];
}
}
fin.close();
// 计算闭包并输出
reflexive_closure();
cout << "Reflexive closure:\n";
print_matrix();
symmetric_closure();
cout << "Symmetric closure:\n";
print_matrix();
transitive_closure();
cout << "Transitive closure:\n";
print_matrix();
return 0;
}
输入如图:
输出如图:
其中“计算传递闭包”部分的代码好像有误,恳请指正!感谢!
https://blog.csdn.net/weixin_46698891/article/details/106004122