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

简介: 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;
}

目录
打赏
0
3
4
1
19
分享
相关文章
剑指offer(C++)-JZ28:对称的二叉树(数据结构-树)
剑指offer(C++)-JZ28:对称的二叉树(数据结构-树)
C++/PTA 最长对称子串
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
98 0
C++/PTA 对称排序
你供职于由一群丑星作为台柱子的信天翁马戏团。你刚完成了一个程序编写,它按明星们姓名字符串的长度非降序(即当前姓名的长度至少与前一个姓名长度一样)顺序输出他们的名单。然而,你的老板不喜欢这种输出格式
89 0
C++的操作符delete很特殊,跟new不对称
C++的操作符delete很特殊,跟new不对称
112 0
C++的操作符delete很特殊,跟new不对称
C++的操作符delete很特殊,跟new不对称
279 0
C++第1周(春)项目1 用枚举表示对称方式
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 【项目1 - 用枚举表示对称方式】设计函数,可以按指定的方式,输出一个平面点的对称点  下面给出枚举类型定义和main函数(测试函数),请写出output函数的实现。 #include&lt;iostream&gt; using namespace std; enu
835 0
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。