离散数学实验(五)判断关系R 是否为等价关系

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

自反性

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

对称性

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

传递的

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

编程要求

给定 R 的关系矩阵,据此判断所给关系 R 是否为等价关系。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
using namespace std;
int td(int a[50][50],int n)
{
	int i, j, k;
	for ( i = 0; i < n; i++)
	{
		for ( j = 0; j < n; j++)//二重数组遍历关系矩阵
		{
			if (a[i][j] == 1)//如果第i行j列的元素是1
			{
				for ( k = 0; k < n; k++)//开始搜索第j行为1的元素
				{
					if (a[j][k] == 1)
					{
						if (a[i][k] != 1)
							return 0;//如果存在这种情况:第i行第j
//列和第j行第k列的元素均为1,但是第i行第k列的元素不为1,则不具有传递性
					}
				}
			}
		}
	}
	return 1;
}
int main()
{
	int n, i, j;
	int a[50][50];
	cout << "请输入n维矩阵:" << endl;
	cin >> n;
	cout << "请输入矩阵:" << endl;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			cin >> a[i][j];
		}
	}
	int s = 0;
	int r = 0;
	for (i = 0; i < n; i++)
	{
		if (a[i][i] == 1)
		{
			s++;
		}
	}
	if (s == n)
	{
		cout << "R具有自反性" << endl;
		r++;
	}
	s = 0;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			if (a[i][j] == a[j][i])
			{
				s++;
			}
		}
	}
	if (s == n * n)
	{
		cout << "R具有对称性" << endl;
		r++;
	}
	if (td(a, n))
	{
		cout << "R具有传递性" << endl;
		r++;
	}
	if (r == 3)
	{
		cout << "R在A上是等价的" << endl;
	}
	return 0;
}

 

 

 

 

  • 5
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值