离散实验 实验三 关系性质判断

一、实验目的

熟悉关系的性质,掌握求判断关系性质的方法

二、实验内容

定义1 设R是集合X上的二元关系,对任意的x∈X,都满足<x,x>∈R,则R是自反的。
定义2 设R是集合X上的二元关系,对任意的x∈X,都满足<x,x>ÏR,则R是反自反的。
定义3 设R是集合X上的二元关系,对任意的x,y∈X,满足<x,y>∈RÞ<y,x>∈R,则R是对称的。
定义4 设R是集合X上的二元关系,对任意的x,y∈X,满足<x,y>∈R∧<y,x>∈RÞx=y,则R是反对称的。X`
定义5 设R是集合X上的二元关系,对任意的x,y,z∈X,满足<x,y>∈R∧<y,z>∈RÞ<x,z>∈R,则R是传递的。
本实验要求从键盘输入一个关系的关系矩阵,判断该关系是否是自反的、对称的、传递的、反自反的、反对称的。

三、实验源程序

#include<iostream>
using namespace std;
void zifan(int a[99][99],int n);//判断函数是否自反;
void duichen(int a[99][99],int n);//判断是否对称;
void chuandi(int an[99][99],int n);//判断是否传递;
void fanzifan(int a[99][99],int n);//判断是否反自反;
void fanduichen(int a[99][99],int n);//判断是否反对称;
int main()
{
	int n,i,j,a[99][99];
	cout<<"请输入关系矩阵列数或行数"<<endl;
	cin>>n;
	cout << "请输入关系矩阵:\n";
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
            cin>>a[i][j];
    zifan(a,n);
    duichen(a,n);
    chuandi(a,n);
    fanzifan(a,n);
    fanduichen(a,n);
    return 0;
	 
 }
 void zifan(int a[99][99],int n)//对角线元素都为 
 {
 	int i;
 	int flag=0;
    for(i=0;i<n;i++)
    {
    	if(a[i][i]==1)
		flag++;	
	}
	if(flag==n)
    cout<<"满足自反性"<<endl; 
}
void fanzifan(int a[99][99],int n)//对角线元素都为0 
{
	int i;
	int flag=0;
    for(i=0;i<n;i++)
    {
    	if(a[i][i]==0)
		flag++;	
	}
	if(flag==n)
    cout<<"满足反自反性"<<endl;
 }
 void duichen(int a[99][99],int n)//关于对角线对称 
 {
 	int i,j,flag=0;
 	for(i=0;i<n;i++)
 	{
 		for(j=0;j<n;j++)
 		{
 			if(a[i][j]==a[j][i])
 			flag++;
		 }
	 }
	 if(flag==n)
	 cout<<"满足对称性"<<endl; 
  }
  void fanduichen(int a[99][99],int n)//不关于对角线对称,或者对角线外元素都为0 
  {
  	int i,j,flag=0,sum=0,s;
 	for(i=0;i<n;i++)判断是否关于对角线对称 
 	{
 		for(j=0;j<n;j++)
 		{
 			if(a[i][j]==a[j][i])
 			flag++;
		 }
	 }
	 for(i=0;i<n;i++)//判断是否除对角线元素外,都为0 
	 {
	 	for(j=0;j<n;j++)
	 	{
	 		sum=sum+a[i][j];
		 }
	 }
	 for(i=0;i<n;i++)
	 {
	 	s=sum-a[i][i];
	 }
	 if(flag<n||s==0)
	 cout<<"满足反对称性"<<endl; 
   }
  void chuandi(int a[99][99],int n)
  {
  	int i,j,k,flag=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            for(int k=0;k<n;k++)
                //判断是否满足传递关系
                if(a[i][j]&&a[j][k]&&!a[i][k])
                {
                    flag=1; 
                }
    if(flag==1)
    cout<<"满足传递性"<<endl;
   }

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

出云coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值