c++实现 离散数学 “自反 对称 ” 详解

c++实现 离散数学 “自反 对称 ” 详解

想要一个关系的实现,那么最重要的就是对于其关系原理的理解
话不多说直接开始吧!


自反性:

其实就是要求在关系图中每一个顶点都有一个环,即在关系矩阵中要求主对角线上的元素为1。
就像这样:

在这里插入图片描述
注意:这里的时候要每一个元素都有环,或者说在关系矩阵中主对角线都是1,才叫做具有自反性
像下面的这个,就不具有自反性了

在这里插入图片描述

反自反性:

听名字就可以知道,他和自反性是完全相反的,所以只要在关系图中每一个顶点都没有环,即在关系矩阵中要求主对角线上的元素为0。
像这样:

在这里插入图片描述
注意:这里的时候要每一个元素都没有环,或者说在关系矩阵中主对角线都是0,才叫做具有反自反性
像下面的这个,就不具有自反性了,也不具有反自反性,他啥也不是

在这里插入图片描述
清楚了他的原理,那么代码的思路就直接出来了
思路:他是4个元素对吧,我们其实就是在判断他主对角线0和1的个数,设立一个二维数组,来对于a[i][i]主对角线进行判断
代码:

void shuzu::zifanxing()//主要依据 
{
	int cout0 = 0,cout1 = 0;
	for (int i = 1; i < 5; i++)
	{
		if (a[i][i] == 0)
			cout0++;
		else if (a[i][i] == 1)
			cout1++;
	}
	if (cout0 == 4) cout << "这个呢,具有自反性" << endl;
	else if (cout1 == 4) cout << "这个呢,具有反自反性" << endl;
	else cout << "这个呢,在自反方面啥也不是" << endl;
}

对称性

这个就比较的好判断,在关系图中就看他有没有礼尚往来,如果具有对称性那么他一定全部!是双边,而在关系矩阵中就是直接关于主对角线对称就可以哒。
像这样:

在这里插入图片描述
他们是不是对称了,哈哈哈哈哈哈哈

反对称性

这个嘛,就是只有单边,没有双边,即在关系矩阵里面没有一个对称的。
超级经典的就是下三角:

在这里插入图片描述
在这里的话,就要注意一下,如果有单有双,那么他在对称性方面他啥也不是。主对角线上的的数不影响他的对称性,你想嘛!关于主对角线对称的话不就是他本身了
思路:
简单的来说就是履历看,a[i][j]和a[j][i],他们是不是相等。来记录他的的单边和双边,再在最后来判断。
代码:

void shuzu::duichenxing()
{ 
	int cout1 = 0, cout0 = 0;
	for (int i = 1; i < 5; i++)
	for (int j = 1; j < 5; j++)
	{
		if (a[i][j] == a[j][i])  cout1++;
		else if (a[i][j] != a[j][i])  cout0++;
	}
	if (cout0 == 0 && cout1 != 0) cout << "这个呢,具有对称性";
	else if (cout1 == 0 && cout0 != 0)  cout << "这个呢,不具有对称性";
	else cout << "这个呢,在对称性方面啥也不是" << endl;

}

最后为了让输入输出的效率更高,我在数组那一块用了重载
重载的介绍可以看 数组输入输出流的重载
https://blog.csdn.net/weixin_52521533/article/details/116309686?spm=1001.2014.3001.5502

*

整体代码

#include <iostream>
using namespace std;
class shuzu
{
public:
	void display();
	void zifanxing();//自反性
	void duichenxing();//对称性
	friend istream & operator >> (istream&input,shuzu&A);
	friend ostream & operator << (ostream&output, shuzu&A);
private:
	int a[5][5];//定义一个4*4的数组,下标0不储存。
};
void shuzu::zifanxing()//主要依据 
{
	int cout0 = 0,cout1 = 0;
	for (int i = 1; i < 5; i++)
	{
		if (a[i][i] == 0)
			cout0++;
		else if (a[i][i] == 1)
			cout1++;
	}
	if (cout0 == 4) cout << "这个呢,具有自反性" << endl;
	else if (cout1 == 4) cout << "这个呢,具有反自反性" << endl;
	else cout << "这个呢,在自反方面啥也不是" << endl;
}
void shuzu::duichenxing()
{ 
	int cout1 = 0, cout0 = 0;
	for (int i = 1; i < 5; i++)
	for (int j = 1; j < 5; j++)
	{
		if (a[i][j] == a[j][i])  cout1++;
		else if (a[i][j] != a[j][i])  cout0++;
	}
	if (cout0 == 0 && cout1 != 0) cout << "这个呢,具有对称性";
	else if (cout1 == 0 && cout0 != 0)  cout << "这个呢,不具有对称性";
	else cout << "这个呢,在对称性方面啥也不是" << endl;

}
void shuzu::display()
{
	for (int i = 1; i < 5; i++)
	for (int j = 1; j < 5; j++)
		cin >> a[i][j];
}
ostream & operator << (ostream&ou, shuzu&A)
{
	for (int i = 1; i < 5; i++)
	for (int j = 1; j < 5; j++)
		ou << A.a[i][j];
	return ou;
}
istream & operator >> (istream&in, shuzu&A)
{
	for (int i = 1; i < 5; i++)
	for (int j = 1; j < 5; j++)
		in >> A.a[i][j];
	return in;
}
int main()
{
	shuzu A;
	cin>>A; 
	A.duichenxing();
	A.zifanxing();
	return 0;
}
  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东莞光年科技

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

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

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

打赏作者

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

抵扣说明:

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

余额充值