今天离散老师布置了一个编程作业:用代码实现关系性质的判断。然后我就结合所学知识写了写,如果哪里有不足欢迎批评指正。

自反性:∀x∈A,有<x,x>∈R。

关系矩阵特点:主对角线元素全为1.

关系图的特点:图中每个顶点都有环。

代码:

int refl(){bool flag=false;for(int i=1;i<=n;i++){if(!e[i][i]){flag=true;break;}}if(flag) return 0;else return 1;
}

反自反性:∀x∈A,有<x,x>∉R。

关系矩阵特点:主对角线元素全为0.

关系图特点:图中每个顶点都没环。

代码:

int irrefl(){bool flag=false;for(int i=1;i<=n;i++){if(e[i][i]){flag=true;break;}}if(flag) return 0;else return 1;
}

对称性:若<x,y>∈R,则<y,x>∈R。

关系矩阵特点:矩阵为对称矩阵。

关系图特点:如果两个顶点之间有边,一定是一对方向相反的边。

代码:

int sym(){bool flag=false;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(e[i][j]&&!e[j][i]){flag=true;}}if(flag) break;}if(flag) return 0;else return 1;
}

反对称性:

若<x,y>∈R,且x不等于y,则<y,x>∉R。

关系矩阵特点:如果r[i][j]=1,且i不等于j,则r[j][i]=0.

关系图特点:如果两个顶点之间有边,一定是一条有向边。

代码:

int irsym(){bool flag=false;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i!=j){if(e[i][j]&&e[j][i]){flag=true;break;}}else continue;}if(flag) break;}if(flag) return 0;else return 1;
}

传递性:

若<x,y>∈R,且<y,z>∈R,则<x,z>∈R。

关系图特点:如果顶点xi到顶点xj有边,xj到xk有边,则从xi到xk有边。

代码:

int tra(){memset(book,0,sizeof(book));for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(e[i][k]&&e[k][j]){book[i][j]=1;//表示两点之间可以到达}}}}bool flag=false;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(book[i][j]){flag=true;break;}}if(flag) break;}if(flag) return 1;else return 0;
}

总代码:

#include<bits/stdc++.h>
using namespace std;
int n,m;//n代表集合中元素的个数,m表示集合r中序偶的个数
int e[101][101];//关系矩阵
int a[101];//集合a
int vis[101][101],book[101][101];
struct node {int x, y;//x为第一元素,y为第二元素
}r[100010];//集合r的序偶
int refl(){bool flag=false;for(int i=1;i<=n;i++){if(!e[i][i]){flag=true;break;}}if(flag) return 0;else return 1;
}
int irrefl(){bool flag=false;for(int i=1;i<=n;i++){if(e[i][i]){flag=true;break;}}if(flag) return 0;else return 1;
}
int sym(){bool flag=false;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(e[i][j]&&!e[j][i]){flag=true;}}if(flag) break;}if(flag) return 0;else return 1;
}
int irsym(){bool flag=false;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i!=j){if(e[i][j]&&e[j][i]){flag=true;break;}}else continue;}if(flag) break;}if(flag) return 0;else return 1;
}
int tra(){memset(book,0,sizeof(book));for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(e[i][k]&&e[k][j]){book[i][j]=1;//表示两点之间可以到达}}}}bool flag=false;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(book[i][j]){flag=true;break;}}if(flag) break;}if(flag) return 1;else return 0;
}
int main() {while (~scanf("%d%d",&n,&m)) {getchar();memset(vis,0,sizeof(vis));memset(e,0,sizeof(e));for (int i = 1; i <= n; i++) {scanf("%d",&a[i]);//输入集合a}getchar();for(int i=1;i<=m;i++){scanf("%d %d",&r[i].x,&r[i].y);//输入集合r的第一第二元素vis[r[i].x][r[i].y]=1;}//生成关系矩阵for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(vis[a[i]][a[j]]) e[a[i]][a[j]]=1;}}if(refl()){printf("具有自反性\n");printf("关系矩阵为\n");for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%d ",e[i][j]);}printf("\n");}}if(irrefl()){printf("具有反自反性\n");printf("关系矩阵为\n");for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%d",e[i][j]);}printf("\n");}}if(sym()){printf("具有对称性\n");printf("关系矩阵为\n");for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%d",e[i][j]);}printf("\n");}}if(irsym()){printf("具有反对称性\n");printf("关系矩阵为\n");for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%d",e[i][j]);}printf("\n");}}if(tra()){printf("具有传递性\n");printf("关系矩阵为\n");for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%d",e[i][j]);}printf("\n");}}}return 0;
}

二元关系的关系性质判断相关推荐

  1. 【集合论】关系性质 ( 常见的关系的性质 | 关系性质示例 | 关系运算性质 )

    文章目录 一.常见的关系的性质 二.关系的性质示例 三.关系运算性质 一.常见的关系的性质 在 自然数集 N={0,1,2,⋯}N=\{ 0, 1,2, \cdots \}N={0,1,2,⋯} 上 ...

  2. 【考研】- 逻辑课-性质判断

    逻辑判断-梳理 基础判断 判断P-有真假 原判断的负判断 复杂判断 联言判断,P且Q.口诀:全真才真,一假则假. 选言判断,P或Q.口诀:全假才假,一真则真. 推理规则:否一推一,肯一不确定 德摩根定 ...

  3. 【集合论】Stirling 子集数 ( 斯特林子集数概念 | 放球模型 | Stirling 子集数递推公式 | 划分的二元关系 加细关系 )

    文章目录 一.Stirling 子集数 二.放球模型 三.Stirling 子集数递推公式 四.Stirling 子集数示例 ( 四元集等价关系个数 ) 五.划分的二元关系 加细关系 一.Stirli ...

  4. 关系模式判断候候选关键字 与 函数依赖无损连接

    关系模式判断候候选关键字 与 函数依赖无损连接 例题:设关系模式R(U, F),其中R上的属性集U={A, B, C, D, E},R上的函数依赖集F={A→B,DE→B,CB→E,E→A,B→D}. ...

  5. CPA二十--关联方关系的判断标准(转载)

    CPA二十--关联方关系的判断标准 1.纵向看: ①.控制(控股>50%,=50%不行) ②.共同控制(投资双方各占50%,或有协议) ③.重大影响(20%-50%) 2.横向看:同受一方或多方 ...

  6. 直线与圆的位置关系怎么判断

    <直线与圆的位置关系>这个知识点应用比较广泛,是几何知识的一个综合运用,在今后的解题及几何证明中,将起到重要的作用,所以就必须熟练掌握它们之间有哪些位置关系.为了更好地理解,我们可以借助数 ...

  7. 关系的性质判断(自反,对称,传递)

    #include<stdio.h> #include<string.h> int u[10][10]; int main(){ int i,j=0,k,e; char m[30 ...

  8. 集合论——二元关系的表示方法,特殊的二元关系及关系的运算

    表示方法 说明 表格表示法 1)        画一个n行m列的表格,A中的元素按顺序标记在竖列左方,B中的元素按顺序标记在横行上方 2)        <ai,bj>∈R时,在表格i行j ...

  9. PTA 哥尼斯堡的“七桥问题”(并查集 + 性质判断)

    哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707-1783)最终解决 ...

最新文章

  1. mybatis报错There is no getter for property named '***' in 'class ***'
  2. 京东如何基于Vitess管理大型MySQL实例集群
  3. HDLBits 系列(21)LFSR(线性反馈移位寄存器)
  4. P4301 [CQOI2013] 新Nim游戏
  5. 最新的20多个JMS面试问答(2020)
  6. java弹球轨迹运动解说,动态弹球的实现 加入了多线程技术-javaSE游戏准备工作
  7. 有人说JavaScript是未来的编程语言?这是为什么?
  8. java redis高并发demo_java使用redis模拟高并发秒杀活动
  9. APNs Push Notification教程一
  10. Ubuntu 16.04 安装 GCC-7.3.0
  11. 最小二乘法计算平面度
  12. 端口映射抖音去水印工具网页源码
  13. html表格怎么加图片,添加图片到HTML表格动态
  14. 树莓派安装系统和系统备份还原
  15. 君莫笑系列视频学习(1)
  16. 手机端上传照片实现 压缩、拖放、缩放、裁剪、合成拼图等功能
  17. NDIS笔记---(2)
  18. 软件著作权和高新技术企业的关系
  19. LD3320和MP3模块搭建语音识别交互系统
  20. Windows Server 2008 R2 活动目录的安装和配置

热门文章

  1. Zephyr DMA
  2. Android模拟器检测体系梳理,kotlin入门
  3. Windows XP 源代码在线泄露
  4. 网页是怎么变灰的?今日Web要求:所有网页变成灰色。
  5. Python函数 — 类型提示和存根文件
  6. SaaS模式、技术与案例详解——第16章 SaaS模式可行性分析
  7. 数据库系统原理与设计——投影运算、选择运算
  8. win10 3D viewer
  9. c 超文本标记语言,网页制作的超文本标记语言称为() - 问答库
  10. javascript 如何正确使用getElementById,getElementsByName(), and getElementsByTagName()