用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语言来判断集合存在的二元关系的更多相关文章

  1. Linq:切勿使用 Count() > 0 来判断集合非空

    原文(http://www.cnblogs.com/ldp615/archive/2011/12/11/2284154.html) Linq 出现之前,我们通常使用下面的方式来判断集合是否非空,即集合 ...

  2. 用Count() > 0 来判断集合非空的问题

    Linq 出现之前,我们通常使用下面的方式来判断集合是否非空,即集合包含元素: ]; ; var list = new List<string>(); ; var collection = ...

  3. 【Go语言】集合与文件操作

    本文目录 1.数据集合的主要操作 1_1.字典的声明 1_2.字典的初始化和创建 1_3.字典的访问和操作 1_4.其他类型的数据集 2.文件操作 2_1.文件操作概述os包和path包 2_2.文件 ...

  4. 函数式Android编程(II):Kotlin语言的集合操作

    原文标题:Functional Android (II): Collection operations in Kotlin 原文链接:http://antonioleiva.com/collectio ...

  5. C#语言基础——集合(ArrayList集合)

    集合及特殊集合 集合的基本信息: System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections ...

  6. C#语言各种集合介绍

    集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问)一个集合包括多个元素,即有一个集合类对象和N个元素对象 因为任何集合类都实现了IEnumerable接口,所以任何集 ...

  7. c#基础语言编程-集合

    引言 在c#常用的集合分为非泛型集合和泛型集合. 非泛型集合的类和接口位于System.Collections命名空间.这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合. 泛型集合 ...

  8. Go 语言Map(集合)

    Map 是一种无序的键值对的集合.Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值. Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它.不过,Map 是无 ...

  9. 我的Java之旅 第五课 JAVA 语言语法 集合

    JAVA集合只能存放引用类型的的数据,不能存放基本数据类型,int 可以用 Integer代替. 一.集合接口  1.  Iterable<E> 实现这个接口允许对象成为 "fo ...

随机推荐

  1. java基础语法 List

    List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引, ArrayList:底层的数据结构使用的是数组结构(数组长度是可 ...

  2. uva1416 dijkstra

    大白书P330 这题比较麻烦 给出一个n个节点m条边的无向图,每条边上有一个正权.令c等于每对节点的最短路长度之和.例n=3时, c = d(1,1)+d(1,2)+d(1,3)+d(2,1)+d(2 ...

  3. 470. Implement Rand10() Using Rand7() (拒绝采样Reject Sampling)

    1. 问题 已提供一个Rand7()的API可以随机生成1到7的数字,使用Rand7实现Rand10,Rand10可以随机生成1到10的数字. 2. 思路 简单说: (1)通过(Rand N - 1) ...

  4. opencv-ios开发笔记9 使用透视变换矫正扭曲的图片

    http://blog.csdn.net/baixiaozhe/article/details/51762086 摄像头观察一个矩形的图片时往往只能得到一个扭曲的图片: 原图: 实际情况是摄像头经常从 ...

  5. POJ 1860 Currency Exchange(Bellman-Ford)

    https://vjudge.net/problem/POJ-1860 题意: 有多种货币,可以交换,有汇率并且需要支付手续费,判断是否能通过不断交换使本金变多. 思路: Bellman-Ford算法 ...

  6. 如何基于Netty处理粘包、拆包问题?

    涉及到相关重要组件: ByteToMessageDecoder MessageToMessageDecoder 这两个组件都实现了ChannelInboundHandler接口,这说明这两个组件都是用 ...

  7. JSP 语法

    JSP 语法 本小节将会简单地介绍一下JSP开发中的基础语法. 脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式: <% 代 ...

  8. 微信小程序-TabBar功能实现

    要实现tabbar的导航条其实很简单,我们要实现全局的tabbar只需要在app.json文件中定义即可,局部的就在局部的tabbar文件中实现. 来看看app.json代码: { "pag ...

  9. vs警告 当前源代码跟内置的版本不一致解决办法

    本文转载于:http://blog.csdn.net/bull521/article/details/51334464 vs警告 当前源代码跟内置的版本不一致解决办法 1.删除掉 我的文档/visua ...

  10. 棋盘分割(二维区间DP)

    题目大意:给一个棋盘,棋盘上每个格子中都有一个值,现在需要将棋盘切成n个矩形,总共切n-1刀,求最小的均方差.均方差定义为:,其中. 题目分析:将均方差化简得到:均方差2=(Σxi2)/n-平均值2. ...