一、实验目的
熟悉关系的性质,掌握求判断关系性质的方法
二、实验内容
定义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)
{
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)
{
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++)
{
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;
}