离散实验五 判断关系R 是否为等价关系(给定 R 的关系矩阵,据此判断所给关系 R 是否为等价关系)

等价关系:集合A上的二元关系R 同时具有自反性、对称性和传递性,则称R是 A上的等价关系。

自反性

从给定的关系矩阵来断判关系 R是否为自反是很容易的。 若 M(R的关系矩 阵)的主对角线元素均为 1,则 R是自反关系;若 M( R的关系矩阵)的主对角 线元素均为 0,则 R是反自反关系;若M(R的关系矩阵)的主对角线元素既有 1 又有 0,则 R既不是自反关系也不是反自反关系。

对称性

从给定的关系矩阵来判断关系 R是否为对称是很容易的。 若 M(R的关系矩 阵)为对称矩阵,则 R 是对称关系;若 M 为反对称矩阵,则 R 是反对称关系。

传递的

一个关系 R的可传递性定义告诉我们, 若关系 R是可传递的, 则必有:m ik =1∧m kj =1 mij =1。这个式子也可改写成为: mij =0 mik =0∨m kj =0。我们可以根据后一个公式来完成判断可传递性这一功能的。

附上运行截图:

离散实验五 判断关系R 是否为等价关系(给定 R 的关系矩阵,据此判断所给关系 R 是否为等价关系)_第1张图片

附上代码: 

#include
using namespace std;
int main()
{
    int n;
    int a[100][100];
    int flag1=0,flag2=0,flag3=0;
    cout<<"请输入R的关系矩阵的阶数:"<>n;
    cout<<"请输入R的关系矩阵:"<>a[i][j];        
    }    
    
    for(int i=0;i

                                                           总结:

这次实验是判断一个关系矩阵是否是等价关系,即判断是否同时具有自反性,对称性,传递性。于是代码分为三部分。

第一部分自反性即判断关系矩阵的主对角线是否都为1,(i==j&&a[i][j]==1)若是,则具有自反性,flag1=0。

第二部分对称性即判断关系矩阵是否关于主对角线对称,(a[i][j]==a[j][i]),若是,则具有对称性,flag2=0。

第三部分判断传递性,我利用求传递性的概念,利用矩阵表示方法,遍历这个矩阵如果遇到一个等于1的位置,记录位置,利用其纵坐标当下一个数的横坐标,在此横坐标下找到是1的位置,记录这个位置,在利用上一个数位置的横坐标和这个数的纵坐标找到一个新的位置,如果这个位置上是1,那么这个数就具有可传递性,然后继续遍历进行这个循环操作,知道检查到所有的数都对上了,这个二元关系才可说具有可传递性,有一个不符的都不是可传递性的二元关系。具有传递性时,flag3=0。

若flag1=0&&flag2=0&&flag3=0,则关系矩阵是等价关系。反之,不是等价关系。

你可能感兴趣的:(离散实验,矩阵,c++)