离散数学:用C语言来判断集合存在的二元关系
用C语言来判断是否满足自反,反自反,非自反,对称,反对称,非对称和传递性
也不知道写的对不对。没有大量验证,但是随便找的一些关系测试的没毛病,如果错了,欢迎各位大佬留言
#include<bits/stdc++.h>
const int maxn=1e3+10;
int a[maxn][maxn];
int vis[maxn][maxn];
int v[maxn][maxn];
int num,s_ize;
int res;
void relation1()//判断自反,反自反,非自反
{
int flag=0;
for(int i=1;i<=num;i++)
{
if(a[i][i])
flag++;
}
if(flag==num)
printf("满足自反性\n");
else if(flag!=num&&flag!=0)
printf("满足非自反性\n");
else if(!flag)
printf("满足反自反性\n");
}
void relation2()//判断对称
{
int flag=0;
for(int i=1;i<=num;i++)
{
for(int j=1;j<=num;j++)
{
if(a[i][j]==a[j][i]&&vis[i][j])
{
flag++;
vis[i][j]=0;
}
}
}
if(flag==s_ize)
{
printf("满足对称性\n");
res++;
}
}
void relation3()//反对称,非对称
{
int flag=0;
for(int i=1;i<num;i++)
{
for(int j=i+1;j<=num;j++)
{
if(a[i][j]&&a[j][i]&&i!=j)
{
flag++;
break;
}
}
}
if(flag==0)
{
res++;
printf("满足反对称性\n");
}
if(!res)
printf("满足非对称性\n");
}
void relation4()//传递性
{
int flag=1;
int num1,num2;
for(int i=1;i<s_ize;i++)
{
for(int j=2;j<=s_ize;j++)
{
if(v[i][2]==v[j][1])
{
num1=v[i][1],num2=v[j][2];
if(vis[num1][num2]!=1)
{
flag=0;
break;
}
}
}
if(!flag)
break;
}
if(!flag)
printf("不满足传递性\n");
else
printf("满足传递性\n");
}
int main(int argc, char const *argv[])
{
printf("---------开始进行二元关系的判断---------\n");
printf("请输入需要执行的次数\n");
int t;
scanf("%d",&t);
int T=0;
while(t--)
{
printf("******Case%d:请输入集合中的元素个数******\n",++T);
scanf("%d",&num);
if(num<=0)
break;
printf("请输入集合中的关系个数:\n");
scanf("%d",&s_ize);
printf("请输入集合中的关系元素,一共有 %d 对关系 %d 个元素(请以整数形式输入) \n",s_ize,2*s_ize);
int x,y;
res=0;
memset(a,0,sizeof(a));
memset(vis,0,sizeof(vis));
for(int k=1;k<=s_ize;k++)
{
scanf("%d%d",&x,&y);
v[k][1]=x;
v[k][2]=y;
a[x][y]=1;
vis[x][y]=1;
}
int i,j;
printf("**********输出关系矩阵**********\n");
for(i=1;i<=num;i++)
{
for(j=1;j<=num;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
relation1();
relation2();
relation3();
relation4();
printf("\n");
}
printf("********************感谢使用********************\n");
return 0;
}
离散数学:用C语言来判断集合存在的二元关系的更多相关文章
- Linq:切勿使用 Count() > 0 来判断集合非空
原文(http://www.cnblogs.com/ldp615/archive/2011/12/11/2284154.html) Linq 出现之前,我们通常使用下面的方式来判断集合是否非空,即集合 ...
- 用Count() > 0 来判断集合非空的问题
Linq 出现之前,我们通常使用下面的方式来判断集合是否非空,即集合包含元素: ]; ; var list = new List<string>(); ; var collection = ...
- 【Go语言】集合与文件操作
本文目录 1.数据集合的主要操作 1_1.字典的声明 1_2.字典的初始化和创建 1_3.字典的访问和操作 1_4.其他类型的数据集 2.文件操作 2_1.文件操作概述os包和path包 2_2.文件 ...
- 函数式Android编程(II):Kotlin语言的集合操作
原文标题:Functional Android (II): Collection operations in Kotlin 原文链接:http://antonioleiva.com/collectio ...
- C#语言基础——集合(ArrayList集合)
集合及特殊集合 集合的基本信息: System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections ...
- C#语言各种集合介绍
集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问)一个集合包括多个元素,即有一个集合类对象和N个元素对象 因为任何集合类都实现了IEnumerable接口,所以任何集 ...
- c#基础语言编程-集合
引言 在c#常用的集合分为非泛型集合和泛型集合. 非泛型集合的类和接口位于System.Collections命名空间.这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合. 泛型集合 ...
- Go 语言Map(集合)
Map 是一种无序的键值对的集合.Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值. Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它.不过,Map 是无 ...
- 我的Java之旅 第五课 JAVA 语言语法 集合
JAVA集合只能存放引用类型的的数据,不能存放基本数据类型,int 可以用 Integer代替. 一.集合接口 1. Iterable<E> 实现这个接口允许对象成为 "fo ...
随机推荐
- 运行.xcworkspace项目后报错:'React/RCTBundleURLProvider.h’ file not found
情况:根据https://github.com/rebeccahughes/react-native-device-info添加依赖库,运行.xcworkspacea项目后报错 解决:Delete n ...
- java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别
在平常工作中使用到char和byte的场景不多,但是如果项目中使用到IO流操作时,则必定会涉及到这两个类型,下面让我们一起来回顾一下这两个类型吧. char和byte的对比 byte byte 字节, ...
- CCPC 2016-2017, Finals Solution
A - The Third Cup is Free 水. #include<bits/stdc++.h> using namespace std; ; int n; int arr[max ...
- hdu5141 线段树
这题说的是给了一串然后计算出这个串的最长递增子序列的长度,然后计算出有过少个子串[i,j] 他们的最长递增子序列和这整个子串的最长递增子序列相同,我们对于每个j最长递增子序列找出他在序列中的使成为最长 ...
- scp命令简单应用
实例1:从远处复制文件到本地目录 $scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/ 说明: 从10.6.159.147机器上的/opt/soft ...
- deepin中crossover或playonlinux装完office后word无法输入中文的问题
原因:office安装是自带了一个微软输入法 解决:装offce时进行自定义安装,在office共享功能里,把输入法去掉. 参考: https://jingyan.baidu.com/article/ ...
- Springmvc的拦截器执行顺序及各方法作用
实现HandlerInterceptor接口或者继承HandlerInterceptor的子类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInt ...
- php时间戳函数mktime()
在项目开发中,偶尔会遇到跨周期.跨月的的时间操作.PHP为我们提供了一个很方便的函数->mktime,可以很简单的获取制定日期的时间戳了. mktime(hour,minute,second,m ...
- 20145326 《Java程序设计》第3周学习总结
20145326 <Java程序设计>第3周学习总结 教材学习内容总结 > 从了解java平台概论,JDK到IDE的介绍,基础语法的运用到现在的类与对象,封装.前三章的知识其实都不是 ...
- 2017-2018-1 JaWorld 第四、五周作业
2017-2018-1 JaWorld 第四.五周作业 两周工作内容 小组讨论并确定最终的app雏形 合作完成需求说明书 工作分工 成员 分工 比例 陈是奇 1.引言 8% 马平川 2.1-2.5 产 ...