claji123 2023-06-27 09:57 采纳率: 20%
浏览 76
已结题

离散数学中等价关系的判断

实现功能:集合A上的二元关系R同时具有自反性、对称性和传递性,则称R是A上的等价关系。给定非空集合A上二元关系R的关系矩阵,判断R是否是A上的等价关系。

输入:一次输入一个关系矩阵,每一行两个相邻元素之间用一个空格隔开,输入元素的行与列分别对应关系矩阵的行与列。注:关系的基数小于12。

输出:1.Y/N(注:具备自反性为Y,不具备为N)

       2.Y/N(注:具备对称性为Y,不具备为N3.Y/N(注:具备传递性为Y,不具备为N4.Y/N(注:是等价关系为Y,无等价关系为N

总是编译失败

  • 写回答

11条回答 默认 最新

  • MarkHan_ 2023-06-27 10:12
    关注
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    bool checkReflexive(const vector<vector<int>>& matrix) {
        int size = matrix.size();
        for (int i = 0; i < size; i++) {
            if (matrix[i][i] != 1)
                return false;
        }
        return true;
    }
    
    bool checkSymmetric(const vector<vector<int>>& matrix) {
        int size = matrix.size();
        for (int i = 0; i < size; i++) {
            for (int j = i + 1; j < size; j++) {
                if (matrix[i][j] != matrix[j][i])
                    return false;
            }
        }
        return true;
    }
    
    bool checkTransitive(const vector<vector<int>>& matrix) {
        int size = matrix.size();
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                if (matrix[i][j] == 1) {
                    for (int k = 0; k < size; k++) {
                        if (matrix[j][k] == 1 && matrix[i][k] != 1)
                            return false;
                    }
                }
            }
        }
        return true;
    }
    
    bool checkEquivalence(const vector<vector<int>>& matrix) {
        return checkReflexive(matrix) && checkSymmetric(matrix) && checkTransitive(matrix);
    }
    
    int main() {
        int size;
        cin >> size; // 输入关系矩阵的大小
    
        vector<vector<int>> matrix(size, vector<int>(size));
    
        // 输入关系矩阵
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                cin >> matrix[i][j];
            }
        }
    
        // 判断等价关系并输出结果
        cout << (checkReflexive(matrix) ? "Y" : "N") << endl;
        cout << (checkSymmetric(matrix) ? "Y" : "N") << endl;
        cout << (checkTransitive(matrix) ? "Y" : "N") << endl;
        cout << (checkEquivalence(matrix) ? "Y" : "N") << endl;
    
        return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 系统已结题 7月5日
  • 创建了问题 6月27日