等价关系C语言实现

数学定义

设 R 是集合 A 上的一个二元关系,若R满足:

​ 自反性:∀ a ∈A, => (a, a) ∈ R

​ 对称性:(a, b) ∈R∧ a ≠ b => (b, a)∈R

​ 传递性:(a, b)∈R,(b, c)∈R =>(a, c)∈R

则称R是定义在A上的一个等价关系。设R是一个等价关系,若(a, b) ∈ R,则称a等价于b,记作 a ~ b

程序实现

#include<stdio.h>
#define N 6

/*是否自反*/
int fu1(int a[][N],int n){
   
	for(int i=0;i<n;i++){
   
		if(a[i][i]!=1)
			return 0;
	}
	return 1;
}

/*是否对称*/
int fu2(int a[][N],int n){
   
	for(int i=0;i
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,我们可以使用数组来实现等价关系的判定。具体来说,我们可以用一个二维数组表示所有元素之间的关系,然后利用传递闭包的思想来判断是否为等价关系。 具体实现过程如下: 1. 定义一个二维数组rel,用来表示元素之间的关系。如果两个元素i,j之间有关系,则rel[i][j]为1,否则为0。 2. 利用传递闭包的思想,对rel数组进行传递闭包操作。即如果rel[i][j]=1且rel[j][k]=1,则设置rel[i][k]=1。 3. 判断等价关系。如果对于所有的i,j都有rel[i][j]=1且rel[j][i]=1,则这个关系是等价关系。 下面是一个简单的C语言程序,可以实现离散数学中等价关系的判定: ``` #include <stdio.h> #define MAX_SIZE 100 int rel[MAX_SIZE][MAX_SIZE]; // 二维数组表示元素之间的关系 int n; // 元素个数 void transitive_closure() // 传递闭包操作 { for(int k = 0; k < n; k++) for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) rel[i][j] = rel[i][j] || (rel[i][k] && rel[k][j]); } int is_equivalence() // 判断是否为等价关系 { for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) if(rel[i][j] != rel[j][i]) // 如果不对称,则不是等价关系 return 0; return 1; } int main() { printf("请输入元素个数:"); scanf("%d", &n); printf("请按顺序输入元素之间的关系(0表示无关系,1表示有关系):\n"); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) scanf("%d", &rel[i][j]); transitive_closure(); if(is_equivalence()) printf("这是一个等价关系。\n"); else printf("这不是一个等价关系。\n"); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值