离散数学实验二 实现任意集合上二元关系的性质判定

本文介绍了一个通过输入集合元素和关系描述,构造关系矩阵并判断其是否满足自反性、反自反性、对称性和反对称性的程序。通过实例演示了如何使用C++实现这一过程,并关注了特殊关系的处理。

实验原理

首先输入集合元素个数,再输入集合元素循环放入数组中,接着输入关系将其转换为关系矩阵,最后调用judge函数输出性质。

#include<iostream>
#define MAX 10
using namespace std;

void judge(int a[][MAX],int n);			//判断关系性质

int main()
{
	int n,tmp1=0,tmp2=0,x=0,y=0;
	string relation;			//存放关系
	int coll[MAX];				//存放集合元素
	int rela[MAX][MAX] = { 0 };			 //关系矩阵
	cout << "请输入集合元素个数:" << endl;
	cin >> n;
	cout << "请输入集合元素(用空格分开):" << endl;
	for (int  i = 0; i < n; i++)
	{
		cin >> coll[i];
	}
	cout << "请按序偶输入关系(格式为{<x,y>,...}):" << endl;
	cin >> relation;
	for (int i = 0; i < relation.size(); i++)
	{
		if (relation[i] == '<')					//遇到'<'开始录入
		{
			while (relation[++i] != ',')
			{
				x = x * 10 + relation[i] - '0';			//字符转数字
				
			}
			while (relation[++i] != '>')
			{
				y = y * 10 + relation[i] - '0';
				
			}
			for (int j = 0; j < n; j++)			//找出元素对应的下标
			{
				if (coll[j] == x)
					tmp1 = j;
				if (coll[j] == y)
					tmp2 = j;
			}
			rela[tmp1][tmp2] = 1;
			x = y = 0;
		}
		
	}
	judge(rela,n);
	return 0;
}

void judge(int a[][MAX],int n)
{
	int sum1=0,sum2=0,sum3=0,flag=1;
	for (int i = 0; i <n ; i++)			//计算对角线的和
	{
		sum1 += a[i][i];
	}
	if (sum1 == n)				//全为1
		cout << "该关系满足自反性。" << endl;			
	if(sum1 == 0)			//全为0
		cout<< "该关系满足反自反性。" << endl;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j <i; j++)
		{
			if (a[i][j] + a[j][i] == 1)		//不对称
				sum2++;
			if (a[i][j] + a[j][i] == 2)		//对称
				sum3++;
		}
	}
	if (sum2 == 0)			
		cout << "该关系满足对称性。" << endl;
	if (sum3 == 0)
		cout << "该关系满足反对称性。" << endl;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (a[i][j]==1)
				for (int k = 0; k < n; k++)
				{
					if (a[j][k] == 1 && a[i][k] == 0)		//只有当xRy,yRz存在,xRz不存在才表示无传递性
						flag = 0;
				}
		}
	}
	if(flag)
		cout<< "该关系满足传递性。" << endl;
}

注意:
空关系、恒等关系这类特殊关系要考虑善意的推断。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值