采用C++语言编写代码,要求输入:一个关系的关系矩阵(键盘输入或从文件读入)。 输出:此关系的自反闭包、对称闭包和传递闭包所对应的关系矩阵。

采用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;
}

输入如图:

img

输出如图:

img

其中“计算传递闭包”部分的代码好像有误,恳请指正!感谢!

https://blog.csdn.net/weixin_46698891/article/details/106004122